2010-10-07 75 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

相关问题