显示名称属性与显示属性

ASP.NET MVC中的DisplayName属性和Display属性有什么区别?

他们都给你相同的结果,但我看到的主要区别是,你不能在DisplayName属性中指定一个ResourceType 。 对于MVC 2中的示例,您必须DisplayName属性以通过本地化提供资源。 Display属性(MVC3和.NET4中的新增function)支持ResourceType重载作为“开箱即用”属性。

DisplayName在模型元数据中设置DisplayName 。 例如:

 [DisplayName("foo")] public string MyProperty { get; set; } 

如果您在您的视图中使用以下内容:

 @Html.LabelFor(x => x.MyProperty) 

它会产生:

 <label for="MyProperty">foo</label> 

Display相同,但也允许您设置其他元数据属性,如名称,说明,…

布拉德威尔逊有一个很好的博客文章,涵盖这些属性

我认为目前的答案忽略了强调实际的重要和重大差异,以及对于预期用途意味着什么。 虽然他们都可以在某些情况下工作,因为实施者build立在两者都支持,他们有不同的使用场景。 以下是区别:

DisplayAttribute

  • System.ComponentModel.DataAnnotations命名空间中
  • 需要对System.ComponentModel.DataAnnotations.dll程序集的引用
  • 可以用于参数和字段
  • 让您设置更多的属性,而不仅仅是Name ,例如Description

DisplayNameAttribute

  • DisplayName位于System.ComponentModel名称空间中
  • 驻留在System.dll因此不需要任何其他特殊参考
  • 可以用于课堂和活动

两者都可以用于属性和方法。

我认为汇编和名称空间确实可以说明预期的用法,所以:

如果注解“数据类”,也就是说在System.ComponentModel.DataAnnotations名称空间中的其他属性(如[Required][Range]不会出现的地方使用DisplayAttribute 。 我认为大多数“用户可编辑”对象都属于这个类别,以及DTO,实体和其他类似的东西。

使用DisplayNameAttribute如果你想为类提供一个友好的名字,并且在那些你不想让数据类中的成员成为一个友好的名字的地方(例如,你有一个类中的方法,你将在开发者列表中作为选项接口的地方)。

也许这是特定于.NET核心,我发现DisplayName将无法正常工作,但显示(名称= …)。 这可能会拯救别人的疑难解答涉及:)

 //using statements using System; using System.ComponentModel.DataAnnotations; //needed for Display annotation using System.ComponentModel; //needed for DisplayName annotation public class Whatever { //Property [Display(Name ="Release Date")] public DateTime ReleaseDate { get; set; } } //cshtml file @Html.DisplayNameFor(model => model.ReleaseDate)