atributo displayname vs atributo display


¿Cuál es la diferencia entre DisplayName atributo y Display atributo en ASP.NET ¿MVC?

Author: Vadim Ovchinnikov, 2011-03-09

4 answers

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, tuvo que subclasificar el atributo DisplayName para proporcionar recursos a través de localización. El atributo Display (nuevo en MVC3 y .NET4) soporta ResourceType sobrecarga como una propiedad "lista para usar".

 61
Author: Spock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-05 17:51:22

DisplayName establece el DisplayName en los metadatos del modelo. Por ejemplo:

[DisplayName("foo")]
public string MyProperty { get; set; }

Y si utiliza 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 unabuena entrada de blog que cubre esos atributos.

 127
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-10 13:58:13

Creo que las respuestas actuales están descuidando resaltar las diferencias importantes y significativas reales y lo que eso significa para el uso previsto. Si bien ambos pueden funcionar en ciertas situaciones porque el implementador creó soporte para ambos, tienen diferentes escenarios de uso. Ambos pueden anotar propiedades y métodos, pero aquí hay algunas diferencias importantes:

DisplayAttribute

  • definido en el espacio de nombres System.ComponentModel.DataAnnotations en el System.ComponentModel.DataAnnotations.dll asamblea
  • se puede usar en parámetros y campos
  • le permite establecer propiedades adicionales como Description o ShortName
  • puede ser localizado con recursos

DisplayNameAttribute

  • DisplayName está en el espacio de nombres System.ComponentModel en System.dll
  • se puede usar en clases y eventos
  • no se puede localizar con recursos

El ensamblado y el espacio de nombres se refieren al uso y la localización previstos el apoyo es el gran pateador. DisplayNameAttribute ha existido desde.NET 2 y parece haber sido pensado más para nombrar componentes y propiedades de desarrolladores en la cuadrícula de propiedades heredadas, no tanto para cosas visibles para los usuarios finales que pueden necesitar localización y cosas así.

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 DTOs, entidades y otras cosas de ese tipo. Lo encuentro bastante desafortunado que lo limitaron para que no se pueda usar en las clases.

EDITAR: Parece que la última fuente de núcleo de.NET permite DisplayAttribute para ser utilizado en clases ahora también.

 12
Author: Mike Marynowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-27 21:35:35

Tal vez esto es específico de.net core, encontré que DisplayName no funcionaría, pero Display(Name=...) hacer. Esto puede ahorrarle a otra persona 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)
 6
Author: mattpm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-08 01:13:05