ASP.NET MVC'de DisplayName
öznitelik ve Display
öznitelik arasındaki fark nedir ?
ASP.NET MVC'de DisplayName
öznitelik ve Display
öznitelik arasındaki fark nedir ?
Yanıtlar:
Her ikisi de aynı sonuçları verir ama tek gördüğüm önemli fark bir belirleyemezsiniz olmasıdır ResourceType
içinde DisplayName
özniteliği. MVC 2'deki bir örnek DisplayName
için, yerelleştirme yoluyla kaynak sağlamak için özniteliği alt sınıflara ayırmanız gerekiyordu. Display
öznitelik (MVC3 ve .NET4'te yeni) ResourceType
"kullanıma hazır" özelliği olarak aşırı yüklemeyi destekler .
DisplayName
DisplayName
model meta verilerindeki öğesini ayarlar . Örneğin:
[DisplayName("foo")]
public string MyProperty { get; set; }
ve kendi görüşünüzde aşağıdakileri kullanırsanız:
@Html.LabelFor(x => x.MyProperty)
şunlara neden olur:
<label for="MyProperty">foo</label>
Display
aynı şeyi yapar, ancak Ad, Açıklama, ... gibi diğer meta veri özelliklerini ayarlamanıza da olanak tanır.
Brad Wilson'ın bu özellikleri kapsayan güzel bir blog yazısı var .
Bence mevcut cevaplar, gerçek önemli ve önemli farklılıkları ve bunun amaçlanan kullanım için ne anlama geldiğini vurgulamayı ihmal ediyor. Uygulayıcı her ikisini de desteklediği için her ikisi de belirli durumlarda çalışabilirken, farklı kullanım senaryoları vardır. Her ikisi de özelliklere ve yöntemlere açıklama ekleyebilir ancak işte bazı önemli farklılıklar:
DisplayAttribute
System.ComponentModel.DataAnnotations
ad alanında tanımlıSystem.ComponentModel.DataAnnotations.dll
Description
veya gibi ek özellikler ayarlamanıza izin verirShortName
DisplayNameAttribute
System.ComponentModel
ad alanındaSystem.dll
Derleme ve ad alanı, amaçlanan kullanımla konuşur ve yerelleştirme desteği büyük bir itici güçtür. DisplayNameAttribute
.
DisplayAttribute
daha sonra .NET 4'te tanıtıldı ve özellikle son kullanıcı tarafından görülebilecek veri sınıflarının üyelerini etiketlemek için tasarlanmış gibi görünüyor, bu nedenle DTO'lar, varlıklar ve bu türden diğer şeyler için daha uygundur. Onu sınırlandırmaları oldukça talihsiz buluyorum, bu yüzden sınıflarda kullanılamaz.
DÜZENLEME: Görünüşe göre en son .NET Core kaynağı DisplayAttribute
artık sınıflarda da kullanılabiliyor.
Belki bu .net çekirdeğine özgüdür, DisplayName'in işe yaramayacağını buldum ama Display (Name = ...) çalışıyor. Bu, başka birini ilgili sorun gidermeden kurtarabilir :)
//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)