asp.net - labelfor - validation asp net mvc
Obtenga DisplayName Attribute sin usar LabelFor Helper en asp.net MVC (3)
Deberías probar la nueva función existente:
<% Html.DisplayNameFor(m => m.YourProperty) %>
¿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?
En mi opinión, debe usar una cadena como tipo de resultado porque de lo contrario omite el mecanismo de codificación. Otro punto es que necesita DisplayName en algunos casos como una cadena (es decir, rellenar las columnas en una clase de WebGrid).
<p>
<%= Html.Encode(
ModelMetadata.FromLambdaExpression<YourViewModel, string>(
x => x.SomeProperty, ViewData).DisplayName
) %>
<p>
Obviamente, para evitar el código de spaghetti siempre es una buena idea escribir un ayudante:
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);
}
}
Y entonces:
<p>
<%: Html.GetDisplayName(x => x.SomeProperty) %>
</p>