Jaka jest różnica między DisplayNameatrybutem a Displayatrybutem w ASP.NET MVC?
Jaka jest różnica między DisplayNameatrybutem a Displayatrybutem w ASP.NET MVC?
Odpowiedzi:
Oba dają te same wyniki, ale widzę kluczową różnicę, że nie można określić atrybutu ResourceTypein DisplayName. Na przykład w MVC 2 należało DisplayNameutworzyć podklasę atrybutu, aby udostępnić zasób za pośrednictwem lokalizacji. Displayatrybut (nowy w MVC3 i .NET4) obsługuje ResourceTypeprzeciążenie jako właściwość „po wyjęciu z pudełka”.
DisplayNameustawia DisplayNamemetadane w modelu. Na przykład:
[DisplayName("foo")]
public string MyProperty { get; set; }
a jeśli używasz w swojej opinii następujących informacji:
@Html.LabelFor(x => x.MyProperty)
wygenerowałoby:
<label for="MyProperty">foo</label>
Display robi to samo, ale umożliwia również ustawienie innych właściwości metadanych, takich jak nazwa, opis, ...
Brad Wilson ma fajny wpis na blogu dotyczący tych atrybutów.
Myślę, że obecne odpowiedzi zaniedbują podkreślenie rzeczywistych ważnych i znaczących różnic oraz tego, co to oznacza dla zamierzonego zastosowania. Chociaż oba mogą działać w pewnych sytuacjach, ponieważ implementujący wbudował obsługę obu, mają różne scenariusze użycia. Oba mogą opisywać właściwości i metody, ale jest kilka ważnych różnic:
DisplayAttribute
System.ComponentModel.DataAnnotationsprzestrzeni nazw w System.ComponentModel.DataAnnotations.dllzestawieDescriptionlubShortNameDisplayNameAttribute
System.ComponentModelprzestrzeni nazw w programieSystem.dllZespół i przestrzeń nazw mówią o zamierzonym użyciu, a obsługa lokalizacji jest wielkim kicker. DisplayNameAttributeistnieje od .NET 2 i wydaje się, że był przeznaczony bardziej do nazywania komponentów deweloperskich i właściwości w starszej siatce właściwości, a nie do rzeczy widocznych dla użytkowników końcowych, które mogą wymagać lokalizacji itp.
DisplayAttributezostał wprowadzony później w .NET 4 i wydaje się być zaprojektowany specjalnie do etykietowania elementów składowych klas danych, które będą widoczne dla użytkownika końcowego, więc jest bardziej odpowiedni dla DTO, jednostek i innych tego typu rzeczy. Uważam, że to raczej niefortunne, że ograniczyli go, więc nie można go używać na zajęciach.
EDYCJA: Wygląda na to, że najnowsze źródło .NET Core pozwala DisplayAttributeteraz również na użycie na zajęciach.
Być może jest to specyficzne dla .net core, zauważyłem, że DisplayName nie działa, ale Display (Name = ...) działa. Może to uratować kogoś innego w rozwiązywaniu problemów :)
//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)