在ASP.NET MVC 3中使用HtmlHelper在表单标记中嵌套多个标签和输入

本文关键字:嵌套 输入 标签 HtmlHelper NET ASP MVC 表单 | 更新日期: 2023-09-27 18:22:03

如何在ASP.NET MVC3中使用HtmlHelper在表单标记中嵌套多个标签和输入?

我的代码如下:

public static string GenerateFormForContact(this HtmlHelper helper, string method, string action, bool includeMailTag)
{
    //form tag
    TagBuilder form = new TagBuilder("form");
    form.Attributes.Add("action", action);
    form.Attributes.Add("method", method);
    //label and input tag
    TagBuilder labelClientName = new TagBuilder("label");
    labelClientName.Attributes.Add("for", "clientName");
    TagBuilder inputClientName = new TagBuilder("input");
    inputClientName.Attributes.Add("name", "clientName");
    inputClientName.Attributes.Add("type", "text");
    inputClientName.Attributes.Add("placeholder", "Your name");
    inputClientName.Attributes.Add("required", "required");
    //how to insert inside form
    TagBuilder labelEmailName = new TagBuilder("label");
    labelEmailName.Attributes.Add("for", "emailName");
    TagBuilder inputEmailName = new TagBuilder("input");
    inputEmailName.Attributes.Add("name", "emailName");
    inputEmailName.Attributes.Add("type", "email");
    inputEmailName.Attributes.Add("placeholder", "Your mail");
    inputEmailName.Attributes.Add("required", "required");
    //how to insert again inside form the second label and input
    //how to insert again inside form the n-th label and input 
    return form.ToString(TagRenderMode.Normal);
}

在ASP.NET MVC 3中使用HtmlHelper在表单标记中嵌套多个标签和输入

如果要将labelEmailNameinputEmailName和其他元素(TagBuilder)包含在已创建的表单或任何其他TagBuilder中,请使用TagBuilder.InnerHtml,如下所示:

form.InnerHtml += labelEmailName.ToString();
form.InnerHtml += inputEmailName.ToString();

这不是一个答案,而是一个建议。有什么理由不使用Razor助手或Partial吗?

我在一个文本编辑器中写了这篇文章,所以它可能有一些不正确的方法,但你会明白:

@helper GenerateFormForContact(string method, string action, bool includeMailTag) {
   <form action="@action" method="@method">
      @Html.Label("some label")
      @Html.Textbox("clientName", null, new { placeholder = "Your name", required = "required" })
      @Html.Label("some label")
      <input type="email" name="emailName" placeholder="Your mail" required="required" />      
   </form>
}

更干净的IMHO。除了传入模型或使用ViewData之外,Partial看起来几乎完全相同。