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