获取DisplayName属性,而不使用asp.net MVC中的LabelFor Helper

检索模型中项目的显示名称属性的最佳方法是什么? 我看到很多人使用LabelFor的帮手来处理所有事情,但是如果我只想列出数据,标签就不合适。 是否有一个简单的方法只是获得名称属性,如果我只是想打印出来,说一个段落?

<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> 

你应该尝试新的现有function:

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

在我看来,你应该使用一个string作为结果types,否则你会跳过编码机制。 另一点是,你需要在某些情况下DisplayName作为一个string(即填充WebGrid类中的列)。