Получить атрибут DisplayName без использования LabelFor Helper в asp.net MVC - PullRequest
62 голосов
/ 08 октября 2010

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

Ответы [ 3 ]

109 голосов
/ 08 октября 2010
<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>
73 голосов
/ 04 июля 2013

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

<% Html.DisplayNameFor(m => m.YourProperty) %>
1 голос
/ 29 июня 2012

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

...