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


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

3 62

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>

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

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

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