Каков наилучший способ получить атрибут отображаемого имени для элемента в вашей модели? Я вижу много людей, использующих помощник LabelFor для всего, но ярлык не подходит, если я просто хочу перечислить данные. Есть ли простой способ получить атрибут имени, если я просто хочу его распечатать, например, абзац?
Получить атрибут DisplayName без использования LabelFor Helper в asp.net MVC
Ответ 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).