Qual é a diferença entre DisplayName
atributo e Display
atributo no ASP.NET MVC?
Qual é a diferença entre DisplayName
atributo e Display
atributo no ASP.NET MVC?
Respostas:
Ambos fornecem os mesmos resultados, mas a principal diferença que vejo é que você não pode especificar um atributo ResourceType
in DisplayName
. Por exemplo, no MVC 2, você teve que subclassificar o DisplayName
atributo para fornecer recursos via localização. Display
O atributo (novo no MVC3 e .NET4) suporta ResourceType
sobrecarga como uma propriedade " pronta para uso".
DisplayName
define os DisplayName
metadados no modelo. Por exemplo:
[DisplayName("foo")]
public string MyProperty { get; set; }
e se você usar em sua exibição o seguinte:
@Html.LabelFor(x => x.MyProperty)
isso geraria:
<label for="MyProperty">foo</label>
Display
faz o mesmo, mas também permite definir outras propriedades de metadados, como Nome, Descrição, ...
Brad Wilson tem um bom post sobre esses atributos.
Penso que as respostas atuais estão negligenciando para destacar as diferenças importantes e significativas e o que isso significa para o uso pretendido. Embora eles possam funcionar em determinadas situações porque o implementador criou suporte para ambos, eles têm diferentes cenários de uso. Ambos podem anotar propriedades e métodos, mas aqui estão algumas diferenças importantes:
DisplayAttribute
System.ComponentModel.DataAnnotations
espaço para nome na System.ComponentModel.DataAnnotations.dll
montagemDescription
ouShortName
DisplayNameAttribute
System.ComponentModel
espaço para nome emSystem.dll
O assembly e o namespace falam sobre o uso pretendido e o suporte à localização é o grande incentivo. DisplayNameAttribute
existe desde o .NET 2 e parece ter se dedicado mais à nomeação de componentes e propriedades de desenvolvedor na grade de propriedades herdadas, não tanto para itens visíveis para os usuários finais que podem precisar de localização e outras coisas.
DisplayAttribute
foi introduzido posteriormente no .NET 4 e parece ter sido projetado especificamente para rotular membros de classes de dados que serão visíveis ao usuário final, portanto, é mais adequado para DTOs, entidades e outras coisas desse tipo. Eu acho bastante lamentável que eles tenham limitado, então ele não pode ser usado nas aulas.
EDIT: Parece que a fonte mais recente do .NET Core também DisplayAttribute
pode ser usada em classes agora.
Talvez isso seja específico do núcleo .net, achei que DisplayName não funcionaria, mas Display (Name = ...) funciona. Isso pode salvar outra pessoa da solução de problemas envolvida :)
//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)