Asp.net mvc 4 MVC帮助程序,如BeginForm

Asp.net mvc 4 MVC帮助程序,如BeginForm,asp.net-mvc-4,extension-methods,Asp.net Mvc 4,Extension Methods,当我在MVC4Web项目中编写下面的代码时 public static class HtmlExtensions { private class Table : IDisposable { private readonly TextWriter _writer; public Table(TextWriter writer) { _writer = writer; } pub

当我在MVC4Web项目中编写下面的代码时

public static class HtmlExtensions
{
    private class Table : IDisposable
    {
        private readonly TextWriter _writer;
        public Table(TextWriter writer)
        {
            _writer = writer;
        }

        public void Dispose()
        {
            _writer.Write("</table>");
        }
    }

    public static IDisposable BeginTable(this HtmlHelper html, string id)
    {
        var writer = html.ViewContext.Writer;
        writer.Write(string.Format("<table id=\"{0}\">", id));
        return new Table(writer);
    }
}
我怎样才能解决这个问题?
谢谢

您必须添加HtmlHelper作为参数,因此您必须以某种方式获得对HtmlHelper的引用。例如,如果您在视图中:

@{
    var helper = Html
    HtmlExtensions.BeginTable(helper,"abc")
}

您可以通过调用new HtmlHelper创建一个新实例。。。但是你必须提供所有参数,比如ViewContext等等

什么是HtmlExtensions类名称空间?这只是一个例子,我们可以称之为“Apple”、“Orange”等。我想写这样的代码,因为我不想在Html中创建我自己的方法组。好奇,为什么要在不将其用作扩展方法的情况下调用它?我像您所说的那样编写,但有一个错误System.NullReferenceException:对象引用未设置为对象的实例。在var writer=html.ViewContext.writer的这一行;哦,对不起,你正在使用writer,我会更新我的答案如果我使用writer有误,请告诉我,我可以用新的代码更改我的代码。非常感谢我用HtmlExtensions.BeginTableHtml,id{content

}解决了这个问题,非常感谢您的关注:但有可能不将帮助器参数从cshtml页面发送到cs文件。只向cs发送id、cshtml?比如htmlex.BeginTableabc
@using(HtmlExtensions.BeginTable("abc"))
{
   @:<th>content etc</th>
}
@{
    var helper = Html
    HtmlExtensions.BeginTable(helper,"abc")
}