2010-04-13 7 views
5

ASP.NET MVC2 में Html.LabelFor() में कोई "आईडी" विशेषता कैसे जोड़ती है?ASP.NET MVC2 में Html.LabelFor() में कोई "आईडी" विशेषता कैसे जोड़ता है?

यह मेरा लेबल कोड है:

<%=Html.LabelFor(x => x.FirstName)%> 

यह मेरी असफल प्रयास है:

<%=Html.LabelFor(x => x.FirstName, new { @id = "first-name" })%> 

धन्यवाद।

उत्तर

0

लेबलफ़ोर, टेक्स्टबॉक्स फोर, XXX के लिए विधि स्वचालित रूप से संपत्ति के नाम के आधार पर आईडी जोड़ती हैं। मुझे नहीं लगता कि आप इसे ओवरराइड कर सकते हैं। यदि आप आईडी सेट करने में सक्षम होना चाहते हैं, तो आपको "गैर-फॉर" विधियों जैसे Html.TextBox का उपयोग करना होगा।

+0

वास्तव में, मुझे नहीं लगता कि LabelFor बिल्कुल एक आईडी कहते है - आईडी शायद करने के लिए आवंटित किया जाएगा:

@Html.LabelFor(Function(model) model.ItemNumber, New With {.id = "ItemNumberL"}) 

यह निम्न HTML उत्पन्न इनपुट फ़ील्ड जो लेबल से जुड़ा हुआ है। मुझे लगता है कि आप सही हैं कि आपको एचटीएमएल विशेषताओं को जोड़ने के लिए गैर-दृढ़ता से टाइप किए गए संस्करण का उपयोग करने की आवश्यकता है। – tvanfosson

0

कैसे इस विस्तार विधि के बारे में

public static class LabelExtensions 

    { 
     public static string Label(this HtmlHelper helper, string target, string id, string text) 
     { 
      return String.Format("<label for='{0}' id='{1}'>{2}</label>", target,id, text); 
     } 
    } 

संपादित

मुझे लगता है कि बेहतर तरीका tagbuilder this example के लिए इसी तरह का उपयोग करें और MergeAttribute फ़ंक्शन का उपयोग आईडी शामिल करने के लिए होगा। asp.net MVC के स्रोत में LabelFor सहायक से

public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string id) 
{ 
    ModelMetadata meta = ModelMetadata.FromLambdaExpression(expression, html.ViewData), 
    string ExpressionHelper.GetExpressionText(expression) 

    string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last(); 
    if (String.IsNullOrEmpty(labelText)) { 
     return MvcHtmlString.Empty; 
    } 

    TagBuilder tag = new TagBuilder("label"); 
    tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); 
    tag.MergeAttribute("id", id); 
    tag.SetInnerText(labelText); 
    return tag.ToMvcHtmlString(TagRenderMode.Normal); 
} 

एक साधारण संशोधन:

4

यहाँ एक सहायक है कि तुम क्या जरूरत है क्या करना चाहिए है।

0

शायद एमवीसी 2 के बाद व्यवहार बदल गया है, हालांकि, मैं रेजर और वीबी.नेट का उपयोग कर रहा हूं, मुझे यह कोड काम करने के लिए मिला है, और यह @ के संभावित अपवाद के साथ होना चाहिए, जिसे आपने id से पहले रखा था (मैं अब MVC4 उपयोग कर रहा हूँ):

<label for="ItemNumber" id="ItemNumberL">ItemNumber</label> 
संबंधित मुद्दे