Quelle est la différence entre l' DisplayName
attribut et l' Display
attribut dans ASP.NET MVC?
Quelle est la différence entre l' DisplayName
attribut et l' Display
attribut dans ASP.NET MVC?
Réponses:
Ils vous donnent tous les deux les mêmes résultats, mais la principale différence que je vois est que vous ne pouvez pas spécifier ResourceType
d' DisplayName
attribut in . Pour un exemple dans MVC 2, vous deviez sous-classer l' DisplayName
attribut pour fournir une ressource via la localisation. Display
l'attribut (nouveau dans MVC3 et .NET4) prend en charge la ResourceType
surcharge en tant que propriété « prête à l'emploi ».
DisplayName
définit le DisplayName
dans les métadonnées du modèle. Par exemple:
[DisplayName("foo")]
public string MyProperty { get; set; }
et si vous utilisez dans votre vue ce qui suit:
@Html.LabelFor(x => x.MyProperty)
cela générerait:
<label for="MyProperty">foo</label>
Display
fait de même, mais vous permet également de définir d'autres propriétés de métadonnées telles que Nom, Description, ...
Brad Wilson a un joli billet de blog couvrant ces attributs.
Je pense que les réponses actuelles négligent de mettre en évidence les différences importantes et significatives réelles et ce que cela signifie pour l'utilisation prévue. Bien qu'ils puissent tous les deux fonctionner dans certaines situations, car l'implémenteur a intégré les deux, ils ont des scénarios d'utilisation différents. Les deux peuvent annoter des propriétés et des méthodes, mais voici quelques différences importantes:
DisplayAttribute
System.ComponentModel.DataAnnotations
espace de noms de l' System.ComponentModel.DataAnnotations.dll
assemblyDescription
ouShortName
DisplayNameAttribute
System.ComponentModel
espace de noms dansSystem.dll
L'assembly et l'espace de noms parlent de l'utilisation prévue et la prise en charge de la localisation est le grand kicker. DisplayNameAttribute
existe depuis .NET 2 et semble avoir été davantage destiné à nommer les composants et propriétés du développeur dans la grille de propriétés héritée, pas tant aux éléments visibles pour les utilisateurs finaux qui peuvent avoir besoin d'une localisation, etc.
DisplayAttribute
a été introduit plus tard dans .NET 4 et semble être conçu spécifiquement pour étiqueter les membres des classes de données qui seront visibles par l'utilisateur final, il est donc plus approprié pour les DTO, les entités et autres choses de ce genre. Je trouve plutôt malheureux qu'ils l'aient limité afin qu'il ne puisse pas être utilisé sur les cours.
EDIT: On dirait que la dernière source .NET Core permet DisplayAttribute
désormais également d'être utilisée sur les classes.
C'est peut-être spécifique au noyau .net, j'ai trouvé que DisplayName ne fonctionnerait pas mais Display (Name = ...) le fait. Cela peut éviter à quelqu'un d'autre le dépannage impliqué :)
//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)