атрибут displayname vs атрибут display
в чем разница между DisplayName
атрибут и Display
атрибут в ASP.NET MVC?
4 ответа:
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 и, похоже, специально разработан для маркировки членов классов данных, которые будут видны конечному пользователю, поэтому он больше подходит для DTOs, сущностей и других вещей такого рода. Я нахожу это довольно неудачным, что они ограничили его, поэтому он не может быть использован на классах, хотя.EDIT: похоже, что последний источник .NET Core позволяет
DisplayAttribute
для использования на классах теперь также.
возможно, это специфично для .net core, я обнаружил, что DisplayName не будет работать, но отображать (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)