Quelle est la différence entre l'attribut DisplayName
et l'attribut Display
dans ASP.NET MVC?
Ils vous donnent tous deux le même résultat, mais la différence essentielle que je vois est que vous ne pouvez pas spécifier un attribut ResourceType
dans DisplayName
. Pour un exemple dans MVC 2, vous deviez sous-classer l'attribut DisplayName
pour fournir des ressources via la localisation. Display
attribut (nouveauté dans MVC3 et .NET4) prend en charge la surcharge ResourceType
sous forme de 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 à votre avis ce qui suit:
@Html.LabelFor(x => x.MyProperty)
cela générerait:
<label for="MyProperty">foo</label>
Display
fait la même chose, mais vous permet également de définir d'autres propriétés de métadonnées telles que Nom, Description, ...
Brad Wilson a un billet de blog Nice couvrant ces attributs.
Je pense que les réponses actuelles négligent de souligner les différences importantes et significatives réelles et ce que cela signifie pour l'utilisation envisagée. Bien que les deux puissent fonctionner dans certaines situations, car l'implémenteur a intégré la prise en charge des 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 dans le System.ComponentModel.DataAnnotations.dll
AssembléeDescription
ou ShortName
DisplayNameAttribute
System.ComponentModel
espace de noms dans System.dll
L'assembly et l'espace de noms parlent de l'utilisation prévue et le support de la localisation est le grand coup de pied. DisplayNameAttribute
existe depuis .NET 2 et semble avoir été conçu pour nommer les composants et les propriétés du développeur dans la grille de propriétés héritée, et non pour les éléments visibles par les utilisateurs finaux pouvant nécessiter une localisation.
DisplayAttribute
a été introduit plus tard dans .NET 4 et semble être spécialement conçu pour étiqueter les membres des classes de données qui seront visibles par l'utilisateur final. Il convient donc mieux aux DTO, aux entités et à d'autres éléments de ce type. Je trouve plutôt malheureux qu'ils l'aient limité, de sorte qu'il ne puisse pas être utilisé pour les cours.
EDIT: On dirait que la dernière source .NET Core autorise également l’utilisation de DisplayAttribute
sur des classes.
Peut-être que cela est spécifique au noyau .net, j'ai trouvé que DisplayName ne fonctionnerait pas mais Display (Name = ...) le fait. Cela peut sauver à 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)