Obtenga DisplayName Attribute sin usar LabelFor Helper en asp.net MVC

¿Cuál es la mejor manera de recuperar el atributo de nombre para mostrar para un artículo en su modelo? Veo a mucha gente usando LabelFor para todo, pero una etiqueta no es apropiada si solo quiero enumerar los datos. ¿Hay una manera fácil de obtener el atributo de nombre si solo quiero imprimirlo, por ejemplo, un párrafo?

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

Obviamente, para evitar el código de spaghetti siempre es una buena idea escribir un ayudante:

 public static class HtmlExtensions { public static MvcHtmlString GetDisplayName( this HtmlHelper htmlHelper, Expression> expression ) { var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); string value = metaData.DisplayName ?? (metaData.PropertyName ?? ExpressionHelper.GetExpressionText(expression)); return MvcHtmlString.Create(value); } } 

Y entonces:

 

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

Deberías probar la nueva función existente:

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

En mi opinión, debe usar una cadena como tipo de resultado porque de lo contrario omite el mecanismo de encoding. Otro punto es que necesita DisplayName en algunos casos como una cadena (es decir, rellenar las columnas en una clase de WebGrid).