Display属性中的ShortName(DataAnnotations)

Name属性正常工作,但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) 

如果您在Display属性上Display ShortName属性的描述,您将看到它的开箱即用范围非常有限:

短名称描述

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

从MVC 2开始 , ModelMetadata提供了两种访问底层数据的方法: FromStringExpressionFromLambdaExpression ,因此您不需要从头开始编写自己的帮助器或扩展方法。

如果您讨厌编写HTML帮助程序方法,则可以全部内联:

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

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

 public static class MvcHtmlHelpers { public static MvcHtmlString ShortNameFor(this HtmlHelper self, Expression> expression) { var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData); var name = metadata.ShortDisplayName ?? metadata.DisplayName ?? metadata.PropertyName; return MvcHtmlString.Create(string.Format(@"{0}", name)); } } 

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

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

进一步阅读

  • 如何显示DisplayAttribute.Description属性值?
  • MVC长期以来一直存在自定义扩展方法,比如在MVC 4中添加之前需要DisplayNameFor
  • 有关[Display(name="")][DisplayName("")]属性之间差异的快速细分,请参阅此问题
  • 有关使用ASP.NET MVC 6 / Core 1的信息,请参阅此答案