Атрибут 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)
Другие вопросы по тегам