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