Jaka jest różnica między DisplayName
atrybutem a Display
atrybutem w ASP.NET MVC?
Jaka jest różnica między DisplayName
atrybutem a Display
atrybutem w ASP.NET MVC?
Odpowiedzi:
Oba dają te same wyniki, ale widzę kluczową różnicę, że nie można określić atrybutu ResourceType
in DisplayName
. Na przykład w MVC 2 należało DisplayName
utworzyć podklasę atrybutu, aby udostępnić zasób za pośrednictwem lokalizacji. Display
atrybut (nowy w MVC3 i .NET4) obsługuje ResourceType
przeciążenie jako właściwość „po wyjęciu z pudełka”.
DisplayName
ustawia DisplayName
metadane 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.DataAnnotations
przestrzeni nazw w System.ComponentModel.DataAnnotations.dll
zestawieDescription
lubShortName
DisplayNameAttribute
System.ComponentModel
przestrzeni nazw w programieSystem.dll
Zespół i przestrzeń nazw mówią o zamierzonym użyciu, a obsługa lokalizacji jest wielkim kicker. DisplayNameAttribute
istnieje 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.
DisplayAttribute
został 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 DisplayAttribute
teraz 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)