在asp.net MVC中不使用LabelFor Helper获取DisplayName属性

Gra*_*ett 62 asp.net asp.net-mvc html-helper asp.net-mvc-3 asp.net-mvc-2

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

Dar*_*rov 109

<p>
    <%= Html.Encode(
        ModelMetadata.FromLambdaExpression<YourViewModel, string>(
            x => x.SomeProperty, ViewData).DisplayName
    ) %>
<p>
Run Code Online (Sandbox Code Playgroud)

显然,为了避免意大利面条代码,写一个帮手总是一个好主意:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

<p>
    <%: Html.GetDisplayName(x => x.SomeProperty) %>
</p>
Run Code Online (Sandbox Code Playgroud)

  • 它在MVC 4中称为DisplayNameFor. (34认同)
  • 请注意,您需要以下`using`s:using System.Linq; 使用System.Linq.Expressions; (3认同)

Ael*_*ios 73

你应该尝试新的现有功能:

<% Html.DisplayNameFor(m => m.YourProperty) %>
Run Code Online (Sandbox Code Playgroud)

  • 剃刀:@ Html.DisplayNameFor(model => model.SomeProperty) (3认同)