¿Cuál es la diferencia entre DisplayName
atributo y Display
atributo en ASP.NET MVC?
¿Cuál es la diferencia entre DisplayName
atributo y Display
atributo en ASP.NET MVC?
Respuestas:
Ambos le dan los mismos resultados, pero la diferencia clave que veo es que no puede especificar un atributo ResourceType
in DisplayName
. Para un ejemplo en MVC 2, tenía que subclasificar el DisplayName
atributo para proporcionar recursos a través de la localización. Display
El atributo (nuevo en MVC3 y .NET4) admite la ResourceType
sobrecarga como una propiedad " lista para usar ".
DisplayName
establece los DisplayName
metadatos en el modelo. Por ejemplo:
[DisplayName("foo")]
public string MyProperty { get; set; }
y si usa en su opinión lo siguiente:
@Html.LabelFor(x => x.MyProperty)
generaría:
<label for="MyProperty">foo</label>
Display
hace lo mismo, pero también le permite establecer otras propiedades de metadatos como Nombre, Descripción, ...
Brad Wilson tiene una buena publicación de blog que cubre esos atributos.
Creo que las respuestas actuales no están resaltando las diferencias importantes y significativas reales y lo que eso significa para el uso previsto. Si bien ambos podrían funcionar en ciertas situaciones porque el implementador incorporó soporte para ambos, tienen diferentes escenarios de uso. Ambos pueden anotar propiedades y métodos, pero aquí hay algunas diferencias importantes:
DisplayAttribute
System.ComponentModel.DataAnnotations
espacio de nombres en el System.ComponentModel.DataAnnotations.dll
ensambladoDescription
oShortName
DisplayNameAttribute
System.ComponentModel
espacio de nombres enSystem.dll
El ensamblaje y el espacio de nombres hablan del uso previsto y el soporte de localización es lo mejor. DisplayNameAttribute
ha existido desde .NET 2 y parece haber sido más destinado a nombrar componentes y propiedades de desarrollador en la cuadrícula de propiedades heredadas, no tanto para cosas visibles para los usuarios finales que pueden necesitar localización y demás.
DisplayAttribute
se introdujo más tarde en .NET 4 y parece estar diseñado específicamente para etiquetar miembros de clases de datos que serán visibles para el usuario final, por lo que es más adecuado para DTO, entidades y otras cosas de ese tipo. Me parece bastante desafortunado que lo limiten, por lo que no se puede usar en las clases.
EDITAR: Parece que la última fuente de .NET Core también permite DisplayAttribute
ser utilizada en clases ahora.
Quizás esto sea específico para .net core, descubrí que DisplayName no funcionaría, pero Display (Name = ...) sí. Esto puede salvar a alguien más la solución de problemas involucrada :)
//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)