2010-10-07 23 views
62

में लेबलफ़ोर हेल्पर का उपयोग किए बिना DisplayName विशेषता प्राप्त करें अपने मॉडल में किसी आइटम के लिए प्रदर्शन नाम विशेषता पुनर्प्राप्त करने का सबसे अच्छा तरीका क्या है? मैं सब कुछ के लिए लेबलफॉर सहायक का उपयोग कर बहुत से लोगों को देखता हूं, लेकिन अगर मैं डेटा को सूचीबद्ध करना चाहता हूं तो एक लेबल उपयुक्त नहीं है। यदि कोई अनुच्छेद कहता है तो क्या मैं सिर्फ नाम विशेषता प्राप्त करने का एक आसान तरीका प्राप्त कर सकता हूं?एएसपीनेट एमवीसी

उत्तर

109
<p> 
    <%= Html.Encode(
     ModelMetadata.FromLambdaExpression<YourViewModel, string>(
      x => x.SomeProperty, ViewData).DisplayName 
    ) %> 
<p> 

जाहिर आदेश स्पेगेटी कोड यह हमेशा एक अच्छा विचार है एक सहायक लिखने के लिए से बचने के लिए:

public static class HtmlExtensions 
{ 
    public static MvcHtmlString GetDisplayName<TModel, TProperty>(
     this HtmlHelper<TModel> htmlHelper, 
     Expression<Func<TModel, TProperty>> expression 
    ) 
    { 
     var metaData = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData); 
     string value = metaData.DisplayName ?? (metaData.PropertyName ?? ExpressionHelper.GetExpressionText(expression)); 
     return MvcHtmlString.Create(value); 
    } 
} 

और फिर:

<p> 
    <%: Html.GetDisplayName(x => x.SomeProperty) %> 
</p> 
+0

धन्यवाद, यही तो मैं प्लस अधिक के बाद कर रहा हूँ है! –

+3

ध्यान दें कि आपको इसके लिए निम्नलिखित का उपयोग करना होगा: System.Linq का उपयोग करना; System.Linq.Expressions का उपयोग कर ; –

+1

ऐसा करने के प्रदर्शन के प्रभाव क्या हैं? मुझे सभी विचारों में इसका उपयोग करने का विचार पसंद है, लेकिन यह सिर्फ .cshtml – Farinha

1

मेरी राय में आप एक का उपयोग करना चाहिए परिणाम प्रकार के रूप में स्ट्रिंग क्योंकि अन्यथा आप एन्कोडिंग तंत्र को छोड़ देते हैं। एक और मुद्दा यह है कि आपको कुछ मामलों में एक स्ट्रिंग के रूप में DisplayName की आवश्यकता है (यानी वेबग्रिड क्लास में कॉलम पॉप्युलेट करें)।

71

आप नए मौजूदा समारोह प्रयास करना चाहिए:

<% Html.DisplayNameFor(m => m.YourProperty) %> 
+3

रेजर: @ एचटीएमएल। डिस्प्लेनाम फॉर (मॉडल => मॉडल। सोमप्रोपर्टी) –

+0

अधिक स्वीकृत उत्तर से सरल। – VDWWD