Qual è la differenza tra DisplayName
attributo e Display
attributo in ASP.NET MVC?
Qual è la differenza tra DisplayName
attributo e Display
attributo in ASP.NET MVC?
Risposte:
Entrambi si danno gli stessi risultati, ma la differenza fondamentale che vedo è che non è possibile specificare un ResourceType
in DisplayName
attributo. Per un esempio in MVC 2, è stato necessario sottoclassare l' DisplayName
attributo per fornire la risorsa tramite localizzazione. Display
L'attributo (nuovo in MVC3 e .NET4) supporta il ResourceType
sovraccarico come proprietà " pronta all'uso ".
DisplayName
imposta i DisplayName
metadati nel modello. Per esempio:
[DisplayName("foo")]
public string MyProperty { get; set; }
e se usi a tuo avviso quanto segue:
@Html.LabelFor(x => x.MyProperty)
genererebbe:
<label for="MyProperty">foo</label>
Display
fa lo stesso, ma consente anche di impostare altre proprietà dei metadati come Nome, Descrizione, ...
Brad Wilson ha un bel post sul blog che copre questi attributi.
Penso che le risposte attuali stiano trascurando per evidenziare le differenze effettive e significative e ciò che ciò significa per l'uso previsto. Sebbene entrambi possano funzionare in determinate situazioni perché l'implementatore ha integrato il supporto per entrambi, hanno diversi scenari di utilizzo. Entrambi possono annotare proprietà e metodi, ma qui ci sono alcune differenze importanti:
DisplayAttribute
System.ComponentModel.DataAnnotations
spazio dei nomi System.ComponentModel.DataAnnotations.dll
nell'assiemeDescription
oShortName
DisplayNameAttribute
System.ComponentModel
spazio dei nomi inSystem.dll
L'assembly e lo spazio dei nomi parlano dell'uso previsto e il supporto della localizzazione è il grande kicker. DisplayNameAttribute
è in circolazione da .NET 2 e sembra essere stato concepito più per la denominazione dei componenti e delle proprietà degli sviluppatori nella griglia delle proprietà legacy, non tanto per le cose visibili agli utenti finali che potrebbero aver bisogno di localizzazione e simili.
DisplayAttribute
è stato introdotto in seguito in .NET 4 e sembra essere progettato specificamente per etichettare i membri delle classi di dati che saranno visibili all'utente finale, quindi è più adatto per DTO, entità e altre cose di quel tipo. Trovo piuttosto sfortunato che lo abbiano limitato, quindi non può essere utilizzato nelle lezioni.
EDIT: Sembra che l'ultima fonte .NET Core consenta DisplayAttribute
di essere utilizzata anche nelle classi ora.
Forse questo è specifico del core .net, ho scoperto che DisplayName non funzionerebbe, ma Display (Name = ...) funziona. Questo può salvare qualcun altro nella risoluzione dei problemi coinvolti :)
//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)