2010-10-07 124 views

回答

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

謝謝,這正是我加上更多之後我! – 2010-10-08 15:24:37

+3

請注意,您需要使用以下'using's:using System.Linq;使用System.Linq.Expressions的 ; – 2010-11-04 11:31:24

+1

這樣做的性能影響是什麼?我喜歡在所有視圖中使用它的想法,但它聽起來比僅僅擁有.cshtml – Farinha 2011-05-01 16:48:25

1

在我看來,你應該使用字符串作爲結果類型,否則會跳過編碼機制。另一點是,在某些情況下需要將DisplayName作爲字符串(即填充WebGrid類中的列)。

71

你應該嘗試新的現有函數:

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

Razor:@ Html.DisplayNameFor(model => model.SomeProperty) – 2015-11-04 07:12:00

+0

Much比接受的答案簡單。 – VDWWD 2017-11-14 20:07:49

相關問題