Получить атрибут DisplayName без использования LabelFor Helper в asp.net MVC

Каков наилучший способ получить атрибут отображаемого имени для элемента в вашей модели? Я вижу много людей, использующих помощник LabelFor для всего, но ярлык не подходит, если я просто хочу перечислить данные. Есть ли простой способ получить атрибут имени, если я просто хочу его распечатать, например, абзац?

Ответ 1

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

Ответ 2

Вы должны попробовать новую существующую функцию:

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

Ответ 3

По-моему, вы должны использовать строку как результат, потому что иначе вы пропустите механизм кодирования. Еще один момент заключается в том, что вам нужно DisplayName в некоторых случаях в качестве строки (например, заполнять столбцы в классе WebGrid).