Get DisplayName Attribute without using LabelFor Helper in asp.net MVC Get DisplayName Attribute without using LabelFor Helper in asp.net MVC asp.net asp.net

Get DisplayName Attribute without using LabelFor Helper in asp.net MVC


<p>    <%= Html.Encode(        ModelMetadata.FromLambdaExpression<YourViewModel, string>(            x => x.SomeProperty, ViewData).DisplayName    ) %><p>

Obviously in order to avoid the spaghetti code it is always a good idea to write a helper:

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);    }}

And then:

<p>    <%: Html.GetDisplayName(x => x.SomeProperty) %></p>


You should try new existing function :

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


In my opinion you should use a string as a result type because otherwise you skip the encoding mechanism. Another point is that you need the DisplayName in some cases as a string (i.e. populate the columns in a WebGrid class).