Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

What is the best way to retrieve the display name attribute for an item in your model? I see a lot of people using the LabelFor helper for everything, but a label isn't appropriate if I just want to list the data out. Is there an easy way just get the Name Attribute if I just want to print it out in, say a paragraph?

like image 487
Graham Conzett Avatar asked Oct 07 '10 20:10

Graham Conzett


3 Answers

<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>
like image 140
Darin Dimitrov Avatar answered Nov 07 '22 00:11

Darin Dimitrov


You should try new existing function :

<% Html.DisplayNameFor(m => m.YourProperty) %>
like image 36
Aelios Avatar answered Nov 07 '22 00:11

Aelios


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).

like image 1
Hardy Avatar answered Nov 07 '22 02:11

Hardy