滚动我自己的@ Html.BeginfBrm()

Chr*_*son 7 extension-methods html.beginform asp.net-mvc-3

我正在编写一个自定义验证集,它将显示div上所有缺少的元素.我希望能够使用一个自定义@Html.BeginForm()方法来写出div,但我真的不知道从哪里开始,因为这个坚果比一个写出标签或字符串的html扩展更难解决(表单封装数据/控件,}最后关闭).

我查看了内置BeginForm()方法的元数据版本,这对我没什么帮助.从本质上讲,我只是想,如果能够延长该法,并把它写出来MvcHtmlStringdiv,这将是显示/ JavaScript中隐藏.

最终我正在努力的是弄清楚如何编写这个具有开始和结束组件的自定义助手.

@using(Html.BeginForm())
{
...

}
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这样的事情:

@using(Html.VBeginForm())
{
...

}
Run Code Online (Sandbox Code Playgroud)

并有渲染我的额外HTML

编辑:从下面的建议添加代码

public class VBeginForm : IDisposable
{
    private readonly HtmlHelper _helper;
    public VBeginForm(HtmlHelper htmlHelper, string areaName)
    {
        _helper = htmlHelper;
        var container = new TagBuilder("form");
        container.GenerateId(areaName);
        var writer = _helper.ViewContext.Writer;
        writer.Write(container.ToString(TagRenderMode.StartTag));
    }

    public void Dispose()
    {
        _helper.ViewContext.Writer.Write("</form>");
    }
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 6

您需要为HtmlHelper打印到的类编写扩展方法helper.ViewContext.Writer.

该方法应该返回一个IDisposable在其Dispose方法中打印结束标记的方法.