2011-06-05 12 views
16

, ben ekran-Öznitelikler'in bir enum kullanıyorum:MVC3 DisplayFor bir Enum'un Display-Attribute öğesinin değerini nasıl gösterir? Bir MVC3-Projesinde

public Foo FooProp { get; set; } 

görünümü modeli sınıfını kullanır ve:

public enum Foo { 
    [Display(Name = "Undefined")] 
    Undef = 0, 

    [Display(Name = "Fully colored")] 
    Full = 1 
} 

modeli sınıfı bu enum kullanarak bir özelliği vardır Şimdi

@Html.DisplayFor(m => m.FooProp) 

aracılığıyla özelliğini görüntüler, son olarak, benim sorum:

Nasıl yapabilirim .DisplayFor(), yalnızca enum'un değer adını göstermek yerine Display-Attribute öğesinden dizeyi gösterir? ("Tanımsız" veya "Tam renkli", ancak "Undef" veya "Full" displaysp göstermelidir). ipuçları için

teşekkürler!

cevap

25

Özel bir ekran şablonu (~/Views/Shared/DisplayTemplates/Foo.cshtml) yardımcı olabilir:

@using System.ComponentModel.DataAnnotations 
@model Foo 

@{ 
    var field = Model.GetType().GetField(Model.ToString()); 
    if (field != null) 
    { 
     var display = ((DisplayAttribute[])field.GetCustomAttributes(typeof(DisplayAttribute), false)).FirstOrDefault(); 
     if (display != null) 
     { 
      @display.Name 
     } 
    } 
} 
+0

Yüksek, o kadar! – Sascha

+0

'If (display.Name.Length> 0)' olmalıdır. Bir DisplayAttribute özelliği yok. –

+0

'FirstOrDefault()' NULL (hiçbir özellik mevcut değil) 'i döndürebilir, böylece bunu da kontrol etmeniz gerekir! –

İlgili konular