c# - programas - atributo de nombre de visualización frente a atributo de visualización
programas en c# (4)
Ambos te dan los mismos resultados, pero la diferencia clave que veo es que no puedes especificar un ResourceType
en el atributo DisplayName
. Para un ejemplo en MVC 2, debe subclase el atributo DisplayName
para proporcionar recursos a través de la localización. Display
atributo de Display
(nuevo en MVC3 y .NET4) admite la sobrecarga de ResourceType
como una propiedad "lista para usar".
¿Cuál es la diferencia entre el atributo DisplayName
y el atributo Display
en ASP.NET MVC?
Creo que las respuestas actuales descuidan destacar las diferencias reales importantes y significativas 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. Aquí están las diferencias:
DisplayAttribute
- en el espacio de nombres
System.ComponentModel.DataAnnotations
- requiere una referencia al ensamblado
System.ComponentModel.DataAnnotations.dll
- se puede usar en parámetros y campos
- le permite establecer más propiedades que solo
Name
, por ejemplo,Description
DisplayNameAttribute
- DisplayName está en el espacio de nombres
System.ComponentModel
- reside en
System.dll
por lo que no necesitará ninguna referencia especial adicional - puede usarse en clases y eventos
Ambos pueden usarse en propiedades y métodos.
Creo que el ensamblado y el espacio de nombres realmente habla del uso previsto, así que:
Utilice DisplayAttribute
si está anotando "clases de datos", es decir, en lugares donde otros atributos en el espacio de nombres System.ComponentModel.DataAnnotations
como [Required]
y [Range]
no estarían fuera de lugar. Creo que la mayoría de los objetos "editables por el usuario" se incluyen en esta categoría, así como los DTO, las entidades y otras cosas de ese tipo.
Use DisplayNameAttribute
si desea dar a las clases un nombre descriptivo y en lugares donde desea darles un nombre descriptivo a los miembros que no están realmente en una clase de datos (es decir, tiene métodos en una clase que va a enumerar como opciones en un desarrollador) interfaz en alguna parte).
Quizás esto es específico para .net core, encontré que DisplayName no funcionaría, pero Display (Name = ...) sí lo hace. Esto puede salvar a alguien más la resolución de problemas involucrados :)
//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)
DisplayName
establece DisplayName
en los metadatos del modelo. Por ejemplo:
[DisplayName("foo")]
public string MyProperty { get; set; }
y si usa en su vista 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.