创建一些东西@using(Html.BeginForm())助手

时间:2011-09-24 06:37:39

标签: asp.net-mvc asp.net-mvc-3

在Asp.net MVC3中编写下面的代码时,它会自动生成包装html

 @using (Html.BeginForm()) {
                @Html.ValidationMessageFor(model => model.Text)
}

它以下面的格式生成代码,

<form method="post" action="/Feeds">
   <!-- Fields Here -->
</form>

我在@using (Html.BeginForm())中的问题会在开头和结尾自动添加<form>标记,如何创建类似我自己的标记。

我正在寻找下面的东西

@using (Html.BeginMYCUSTOMDIV())
  {
        I am text inside div
  }

预期的生成输出

<div class="customDivClass">
I am text inside div
</div>

2 个答案:

答案 0 :(得分:9)

有些事情:

public class MyDiv : IDisposable
{
    private readonly TextWriter _writer;
    public MyDiv(TextWriter writer)
    {
        _writer = writer;
    }

    public void Dispose()
    {
        _writer.WriteLine("</div>");
    }
}

public static class MyExtensions
{
    public static MyDiv BeginMYCUSTOMDIV(this HtmlHelper htmlHelper)
    {
        var div = new TagBuilder("div");
        div.AddCssClass("customDivClass");
        htmlHelper.ViewContext.Writer.WriteLine(div.ToString(TagRenderMode.StartTag));
        return new MyDiv(htmlHelper.ViewContext.Writer);
    }
}

并在视图中:

@using (Html.BeginMYCUSTOMDIV())
{
    <span>Hello</span>
}

产生

<div class="customDivClass">
    <span>Hello</span>
</div>

答案 1 :(得分:3)

如果我没弄错的话,Html.BeginForm()会返回IDisposable个对象。在using块中使用时,将调用对象的Dispose方法,该方法负责将结束标记写入输出。

how does using HtmlHelper.BeginForm() work?

Html.BeginForm() type of extension