Asp.net mvc 4 MVC帮助程序,如BeginForm
当我在MVC4Web项目中编写下面的代码时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
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")
}