显示名称属性与显示属性
 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)