Display属性中的ShortName(DataAnnotations)

时间:2014-06-11 05:34:05

标签: c# asp.net-mvc asp.net-mvc-4 razor data-annotations

名称属性正常,但ShortName不起作用。

[Display(Name = "Date of the transfer the task", ShortName = "Trans date")]
public DateTime TransferDate { get; set; }

即使我删除了Name属性,也会忽略ShortName(" TransferDate"显示在列标题中)。

在视图中我这样做:

@Html.DisplayNameFor(model => model.TransferDate)

1 个答案:

答案 0 :(得分:5)

如果您查看ShortName propertyDisplay Attribute的说明,您会发现其开箱即用的范围非常有限:

Short Name Description

当然,这并不限制您在模型元数据上利用该值,但是没有任何本地帮助程序可以这样做。

Starting with MVC 2ModelMetadata提供了两种访问基础数据的方法:FromStringExpressionFromLambdaExpression,因此您不需要以书面形式从头开始你自己的帮手或扩展方法。

如果您讨厌编写HTML帮助程序方法,则可以内联执行此操作:

@ModelMetadata.FromLambdaExpression<RegisterModel, string>( 
            model => model.TransferDate, ViewData).ShortDisplayName} )  

但是,为了访问的一致性,代码的重复数据删除和改进的错误处理,添加扩展方法也是完全有效的

public static class MvcHtmlHelpers
{
   public static MvcHtmlString ShortNameFor<TModel, TValue>(this HtmlHelper<TModel> self, 
           Expression<Func<TModel, TValue>> expression)
   {
       var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData);
       var name = metadata.ShortDisplayName ?? metadata.DisplayName ?? metadata.PropertyName;

       return MvcHtmlString.Create(string.Format(@"<span>{0}</span>", name));
   }
}

然后像任何其他帮助方法一样使用:

@Html.ShortNameFor(model => model.TransferDate)

进一步阅读