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?
<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>
Vous devriez essayer une nouvelle fonction existante:
<% Html.DisplayNameFor(m => m.YourProperty) %>
À 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).