Чим відрізняється 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абоShortNameDisplayNameAttribute
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)