görüntü adı özniteliği ve görüntü özniteliği karşılaştırması


Yanıtlar:


69

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 .


1
Bunu bildiğim iyi oldu! Görünen değeri .resx dosyasından yüklemek için özel bir öznitelik uygulamak üzereydi, ardından bu soruya geldi. Görüntü özelliği, yerelleştirilmiş uygulamalar geliştirirken gidilecek yoldur.
Carl Heinrich Hancke

148

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 .


1
+1 - muhtemelen benimkinden çok daha yararlı (şimdi silindi); benim için sabah çok erken :)
Andras Zoltan

PropertyDescriptor ile ve Display'i kullanırken (name .. @ descriptor.DisplayName
çağrılırken

24

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

  • derlemedeki System.ComponentModel.DataAnnotationsad alanında tanımlıSystem.ComponentModel.DataAnnotations.dll
  • parametreler ve alanlar üzerinde kullanılabilir
  • Descriptionveya gibi ek özellikler ayarlamanıza izin verirShortName
  • kaynaklarla yerelleştirilebilir

DisplayNameAttribute

  • DisplayName, içindeki System.ComponentModelad alanındaSystem.dll
  • sınıflarda ve etkinliklerde kullanılabilir
  • kaynaklarla yerelleştirilemez

Derleme 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.


13

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.