sintaxis programas por paseo ejemplos declaración crear como clases atributos atributo c# asp.net-mvc data-annotations displayattribute .net-attributes

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.