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
提供了两种访问底层数据的方法: FromStringExpression
和FromLambdaExpression
,因此您不需要从头开始编写自己的帮助器或扩展方法。
如果您讨厌编写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的信息,请参阅此答案