Was ist der Unterschied zwischen DisplayName
Attribut und Display
Attribut in ASP.NET MVC?
Was ist der Unterschied zwischen DisplayName
Attribut und Display
Attribut in ASP.NET MVC?
Antworten:
Beide liefern die gleichen Ergebnisse, aber der Hauptunterschied, den ich sehe, besteht darin, dass Sie kein ResourceType
in- DisplayName
Attribut angeben können . In einem Beispiel in MVC 2 mussten Sie das DisplayName
Attribut in Unterklassen unterteilen , um Ressourcen über die Lokalisierung bereitzustellen. Display
Das Attribut (neu in MVC3 und .NET4) unterstützt die ResourceType
Überladung als "out of the box" -Eigenschaft .
DisplayName
Legt die DisplayName
im Modell enthaltenen Metadaten fest. Beispielsweise:
[DisplayName("foo")]
public string MyProperty { get; set; }
und wenn Sie aus Ihrer Sicht Folgendes verwenden:
@Html.LabelFor(x => x.MyProperty)
es würde erzeugen:
<label for="MyProperty">foo</label>
Display
macht das gleiche, aber Sie können auch andere Metadateneigenschaften wie Name, Beschreibung, ... festlegen.
Brad Wilson hat einen schönen Blog-Beitrag über diese Attribute.
Ich denke, die aktuellen Antworten vernachlässigen es, die tatsächlich wichtigen und signifikanten Unterschiede hervorzuheben und was dies für die beabsichtigte Verwendung bedeutet. Während beide in bestimmten Situationen funktionieren können, weil der Implementierer Unterstützung für beide integriert hat, haben sie unterschiedliche Verwendungsszenarien. Beide können Eigenschaften und Methoden mit Anmerkungen versehen, aber hier sind einige wichtige Unterschiede:
DisplayAttribute
System.ComponentModel.DataAnnotations
Namespace in der System.ComponentModel.DataAnnotations.dll
Assembly definiertDescription
oder festlegenShortName
DisplayNameAttribute
System.ComponentModel
Namespace inSystem.dll
Die Assembly und der Namespace sprechen für die beabsichtigte Verwendung, und die Lokalisierungsunterstützung ist der große Kicker. DisplayNameAttribute
gibt es seit .NET 2 und scheint eher für die Benennung von Entwicklerkomponenten und -eigenschaften im Legacy-Eigenschaftenraster gedacht zu sein, nicht so sehr für Dinge, die für Endbenutzer sichtbar sind, die möglicherweise eine Lokalisierung und dergleichen benötigen.
DisplayAttribute
wurde später in .NET 4 eingeführt und scheint speziell für die Kennzeichnung von Mitgliedern von Datenklassen entwickelt worden zu sein, die für den Endbenutzer sichtbar sind. Daher eignet es sich besser für DTOs, Entitäten und andere Dinge dieser Art. Ich finde es ziemlich bedauerlich, dass sie es eingeschränkt haben, so dass es nicht für Klassen verwendet werden kann.
BEARBEITEN: Es sieht so aus, als ob die neueste .NET Core-Quelle DisplayAttribute
jetzt auch für Klassen verwendet werden kann.
Vielleicht ist dies spezifisch für den .net-Kern. Ich habe festgestellt, dass DisplayName nicht funktioniert, Display (Name = ...) jedoch. Dies kann jemand anderem die Fehlerbehebung ersparen :)
//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)