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

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

62
задан 26 November 2013 в 14:43

3 ответа

<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>
109
ответ дан 31 October 2019 в 13:14

Необходимо попробовать новую существующую функцию:

<% Html.DisplayNameFor(m => m.YourProperty) %>
73
ответ дан 31 October 2019 в 13:14

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

1
ответ дан 31 October 2019 в 13:14

Другие вопросы по тегам:

Похожие вопросы: