2012-02-01 16 views
3

ASP.NET MVC3でフォームタグ内に複数のラベルと入力をHtmlHelperでネストするにはどうすればよいですか?ASP.NET MVC 3で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); 
} 
+3

あなたの質問がコード内のコメントであるとは思っていませんでした。おそらく、質問を編集して、コードの外側の上部に質問を追加すると、より明確になるでしょう。コード内にコメントを残して、人々がその行を見つけるのを助けることができます。 – DOK

答えて

13

あなたは既に作成されたフォームまたはこのような任意の他のTagBuilder使用TagBuilder.InnerHtmllabelEmailNameinputEmailNameおよび他の要素(TagBuilder年代)を囲みたい場合:

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

Doh!私の頭はどこですか?ありがとう:) –

4

これは解答ではなく、示唆です。このために剃刀ヘルパーまたはパーシャルを使用しない理由は何ですか?

それはおそらく、いくつかの間違った方法を持っているので、私は、テキストエディタでこれを書いていますが、アイデアを得る:

@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> 
} 

よりクリーン私見を。 Partialは、モデルを渡すかViewDataを使用する点を除いて、ほぼ同じように見えます。

関連する問題