Jaka jest różnica między DisplayName
atrybutem a Display
atrybutem w ASP.NET MVC?
c#
asp.net-mvc
data-annotations
displayattribute
.net-attributes
Ghooti Farangi
źródło
źródło
DisplayName
ustawiaDisplayName
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:
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.
źródło
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 wSystem.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.źródło
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)
źródło