В чем разница между атрибутом DisplayName и атрибутом Display в ASP.NET MVC?
Атрибут displayname с атрибутом отображения
Ответ 1
Они оба дают вам те же результаты, но ключевое различие, которое я вижу, заключается в том, что вы не можете указать атрибут ResourceType в DisplayName. Для примера в MVC 2 вам необходимо подклассифицировать атрибут DisplayName, чтобы предоставить ресурс через локализацию. Атрибут Display (новый в MVC3 и .NET4) поддерживает перегрузку ResourceType как свойство "из коробки".
Ответ 2
 DisplayName устанавливает DisplayName в метаданных модели. Например:
[DisplayName("foo")]
public string MyProperty { get; set; }
и если вы используете в своем представлении следующее:
@Html.LabelFor(x => x.MyProperty)
он будет генерировать:
<label for="MyProperty">foo</label>
 Display делает то же самое, но также позволяет вам устанавливать другие свойства метаданных, такие как Name, Description,...
У Брэда Уилсона есть хорошая запись в блоге, охватывающая эти атрибуты.
Ответ 3
Я думаю, что в текущих ответах игнорируются основные важные и существенные различия и что это означает для предполагаемого использования. Хотя они могут работать в определенных ситуациях, потому что разработчик поддерживает поддержку обоих, они имеют разные сценарии использования. Вот отличия:
DisplayAttribute
-  в пространстве имен 
System.ComponentModel.DataAnnotations -  требует ссылки на сборку 
System.ComponentModel.DataAnnotations.dll - может использоваться для параметров и полей
 -  позволяет вам устанавливать больше свойств, чем просто 
Name, например.Description 
DisplayNameAttribute
-  DisplayName находится в пространстве имен 
System.ComponentModel -  находится в 
System.dll, поэтому не потребуются дополнительные специальные ссылки - может использоваться для классов и событий
 
Оба могут использоваться для свойств и методов.
Я думаю, что сборка и пространство имен действительно говорят о предполагаемом использовании, поэтому:
Используйте DisplayAttribute, если вы аннотируете "классы данных", то есть в тех местах, где другие атрибуты в пространстве имен System.ComponentModel.DataAnnotations, таких как [Required] и [Range], не будут неуместны. Я думаю, что большинство "редактируемых пользователем" объектов относятся к этой категории, а также к DTO, сущностям и другим вещам такого рода.
Используйте DisplayNameAttribute, если вы хотите дать классам дружественное имя и в тех местах, где вы хотите предоставить членам, которые на самом деле не являются классом данных, дружественное имя (т.е. у вас есть методы в классе, который вы будете перечислять как опции в интерфейсе разработчика где-то).
Ответ 4
Возможно, это специфично для ядра .net, я обнаружил, что DisplayName не будет работать, но Display (Name=...). Это может спасти кого-то еще от устранения неполадок:)
//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)