Qual è la differenza tra DisplayNameattributo e Displayattributo in ASP.NET MVC?
Qual è la differenza tra DisplayNameattributo e Displayattributo in ASP.NET MVC?
Risposte:
Entrambi si danno gli stessi risultati, ma la differenza fondamentale che vedo è che non è possibile specificare un ResourceTypein DisplayNameattributo. Per un esempio in MVC 2, è stato necessario sottoclassare l' DisplayNameattributo per fornire la risorsa tramite localizzazione. DisplayL'attributo (nuovo in MVC3 e .NET4) supporta il ResourceTypesovraccarico come proprietà " pronta all'uso ".
DisplayNameimposta i DisplayNamemetadati 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.DataAnnotationsspazio dei nomi System.ComponentModel.DataAnnotations.dllnell'assiemeDescriptionoShortNameDisplayNameAttribute
System.ComponentModelspazio dei nomi inSystem.dllL'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 DisplayAttributedi 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)