Чим відрізняється DisplayName
атрибут від Display
атрибута в ASP.NET MVC?
Чим відрізняється DisplayName
атрибут від Display
атрибута в ASP.NET MVC?
Відповіді:
Вони обидва дають вам ті ж результати , але ключова різниця я бачу, що ви не можете вказати 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
System.ComponentModel
просторі імен уSystem.dll
Збірка та простір імен говорить про те, що передбачувана підтримка використання та локалізації є великим ножом. DisplayNameAttribute
існує. з часу .NET 2 і, здається, призначений більше для іменування компонентів та властивостей розробника в застарілій сітці властивостей, не стільки для речей, видимих для кінцевих користувачів, яким може знадобитися локалізація тощо.
DisplayAttribute
була представлена пізніше в .NET 4 і, здається, створена спеціально для маркування членів класів даних, які будуть видимими для кінцевих користувачів, тому вона більше підходить для DTO, сутностей та інших речей подібного роду. Я вважаю досить прикро, що вони обмежили його, тому його не можна використовувати на заняттях.
EDIT: Схоже, останнє джерело .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)