MVC中经常会用到这样的话:
@Html.DisplayNameFor(model => model.OpenId)
这会把这个属性的名称显示出来。
但是如果想显示别的名称呢?就要在属性上加上
[Display(Description= "昵称")] 。
解析一下原理,看一下源码:
public static MvcHtmlString DisplayNameFor<TModel, TValue>(this HtmlHelper<IEnumerable<TModel>> html, Expression<Func<TModel, TValue>> expression)
{
return html.DisplayNameForInternal(expression, null);
}
internal static MvcHtmlString DisplayNameForInternal<TModel, TValue>(this HtmlHelper<IEnumerable<TModel>> html, Expression<Func<TModel, TValue>> expression, ModelMetadataProvider metadataProvider)
{
return DisplayNameExtensions.DisplayNameHelper(ModelMetadata.FromLambdaExpression(expression, new ViewDataDictionary<TModel>(), metadataProvider), ExpressionHelper.GetExpressionText(expression));
}
internal static MvcHtmlString DisplayNameHelper(ModelMetadata metadata, string htmlFieldName)
{
string s = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
return new MvcHtmlString(HttpUtility.HtmlEncode(s));
}
可见,最终是去元数据里面找这个特性的值去了。这也就是经常说的,特性是在MetaData中