2010-02-19 8 views

उत्तर

7

ठीक है, इस विधि के लिए स्रोत (System.Web.Mvc.Html.LabelExtensions.cs) को देखते हुए, एएसपी.नेट एमवीसी 2 में एचटीएमएलहेल्पर के साथ ऐसा करने का कोई तरीका प्रतीत नहीं होता है। लगता है कि आपका सर्वश्रेष्ठ दांव या तो अपने स्वयं HtmlHelper बना सकते हैं या इस विशिष्ट लेबल के लिए निम्न करने के लिए है:

<label for="Name" class="myLabel"><%= Model.Name %></label> 
+0

यह ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है। लेकिन शायद यह एक और त्रुटि है। मैं सिर्फ एमवीसी के लिए वास्तव में नया हूँ। तो सीएसएस वर्ग को एचटीएमएल में डालने का कोई तरीका नहीं है। लेबलफॉर, ठीक है, रिचर्ड धन्यवाद! – Aximili

+0

रिचर्ड ने क्या सुझाव दिया है, बस लेबलफॉर() के अपने स्वयं के HtmlHelper अधिभार बनाएं। यदि आप सुनिश्चित नहीं हैं कि अभिव्यक्ति हस्ताक्षर कैसे बनाएं, तो आप लेबलफॉर() स्रोत कोड के सिंटैक्स की प्रतिलिपि बना सकते हैं। –

+2

हाय नाथन, आप लेबलफॉर के लिए ओवरलोड कैसे बनाते हैं? या मैं इसे कहां से कॉपी कर सकता हूं? आप इसे एक नए उत्तर के रूप में पोस्ट कर सकते हैं, धन्यवाद। – Aximili

65

LabelFor का अधिभार:

public static class NewLabelExtensions 
{ 
    public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes) 
    { 
     return LabelFor(html, expression, new RouteValueDictionary(htmlAttributes)); 
    } 
    public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes) 
    { 
     ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); 
     string htmlFieldName = 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.MergeAttributes(htmlAttributes); 
     tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); 
     tag.SetInnerText(labelText); 
     return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal)); 
    } 
} 

http://weblogs.asp.net/imranbaloch/archive/2010/07/03/asp-net-mvc-labelfor-helper-with-htmlattributes.aspx

+0

नाथन टेलर की तरह कहते हैं, और aximili –

121

दुःख की बात 0,123,545 मेंHtml.LabelFor() विधि में कोई विधि हस्ताक्षर नहीं है जो प्रत्यक्ष श्रेणी की घोषणा की अनुमति देता है। हालांकि, MVC 4 2 अधिभार जोड़ता है जो HTMLAttributes अज्ञात ऑब्जेक्ट को स्वीकार करता है।

सभी एचटीएमएल हेल्पर के साथ यह याद रखना महत्वपूर्ण है कि सी # कंपाइलर class को आरक्षित शब्द के रूप में देखता है।

तो अगर आप कक्षा से पहले @ विशेषता का उपयोग करने समस्या को हल काम करता है, अर्थात्:

@Html.LabelFor(model => model.PhysicalPostcode, new { @class= "SmallInput" }) 

@ प्रतीक "वर्ग" एक शाब्दिक कि के माध्यम से पारित हो जाता है बनाता है।

+14

के लिए यह अधिक उल्टा क्यों नहीं है? यह पूरी तरह से काम करता है! (एमवीसी 4 में, कम से कम।) –

+5

मैंने एमवीसी 3 में कोशिश की, ऐसा लगता है कि यह पसंद नहीं है ... शायद एमवीसी 4 एफटीडब्ल्यू! – series0ne

+0

यह वही है जो मैं ढूंढ रहा हूं। मैं एमवीसी 4 बीटीडब्ल्यू का उपयोग कर रहा हूं :) –

संबंधित मुद्दे