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 ResourceTypeiçinde DisplayNameözniteliği. MVC 2'deki bir örnek DisplayNameiç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 .
DisplayNameDisplayNamemodel 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.DataAnnotationsad alanında tanımlıSystem.ComponentModel.DataAnnotations.dllDescriptionveya gibi ek özellikler ayarlamanıza izin verirShortNameDisplayNameAttribute
System.ComponentModelad alanındaSystem.dllDerleme ve ad alanı, amaçlanan kullanımla konuşur ve yerelleştirme desteği büyük bir itici güçtür. DisplayNameAttribute.
DisplayAttributedaha 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ğı DisplayAttributeartı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)