MVC助手就像BeginForm

时间:2014-08-06 09:00:36

标签: asp.net-mvc-4 extension-methods

当我在下面的MVC 4 Web项目中编写此代码时

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);
    }
}

我可以这样使用,

@using(Html.BeginTable("abc"))
{
    @:<th>content etc</th>
}

但我不想使用Html

开头

示例,我想像这个项目一样使用

@using(HtmlExtensions.BeginTable("abc"))
{
   @:<th>content etc</th>
}

我该如何解决这个问题? 感谢

1 个答案:

答案 0 :(得分:0)

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

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

您可以通过调用new HtmlHelper(...)来创建新实例,但是您必须提供所有参数,例如ViewContext等等