2010-10-07 11 views

cevap

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

Açıkçası bir yardımcı yazmak için iyi bir fikir her zaman olduğu spagetti kod önlemek için: o zaman

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); 
    } 
} 

Ve:

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

Teşekkür ederim, Bu tam da artı daha sonra olduğum şey bu! –

+3

Bunun için aşağıdaki 'using's 'a ihtiyacınız olduğunu unutmayın: using System.Linq; System.Linq.Expressions kullanarak ; –

+1

Bunu yapmanın performans sonuçları nelerdir? Bunu tüm görünümlerde kullanma fikrini beğendim, ancak metni sadece .cshtml – Farinha

1

Bence sen kullanmalısınız Sonuç türü olarak dizge, aksi halde kodlama mekanizmasını atlarsınız. Başka bir nokta, bazı durumlarda bir Dize olarak DisplayName'e ihtiyacınız olmasıdır (yani, bir WebGrid sınıfındaki sütunları doldurun).

71

Yeni varolan işlevini denemelisiniz:

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

Razor: @ Html.DisplayNameFor (model => model.SomeProperty) –

+0

Çok kabul edilen cevaptan daha basit. – VDWWD