web-dev-qa-db-fra.com

Obtenez l'attribut DisplayName sans utiliser LabelFor Helper dans asp.net MVC

Quelle est la meilleure façon de récupérer l'attribut de nom d'affichage pour un article de votre modèle? Je vois beaucoup de gens utiliser l'assistant LabelFor pour tout, mais une étiquette n'est pas appropriée si je veux simplement lister les données. Existe-t-il un moyen simple d'obtenir simplement l'attribut de nom si je veux simplement l'imprimer, par exemple un paragraphe?

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

Évidemment, afin d'éviter le code spaghetti, il est toujours judicieux d'écrire un assistant:

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

Puis:

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

Vous devriez essayer une nouvelle fonction existante:

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

À mon avis, vous devez utiliser une chaîne comme type de résultat, sinon vous ignorez le mécanisme de codage. Un autre point est que vous avez besoin du DisplayName dans certains cas comme une chaîne (c'est-à-dire remplir les colonnes dans une classe WebGrid).

1
Hardy