EF6

2015-09-27 17 views
6

'u kullanarak herhangi bir özellik için Denetleyicide [Ekran (Ad = "")] özniteliğinde değer nasıl elde edilir Bir MVC 5 uygulaması geliştiriyorum. Herhangi bir sınıfın herhangi bir özelliği için denetleyici yöntemimde [Ekran (Ad = "")] özniteliğindeki değeri almak istiyorum. Ben answer to this question baktımEF6

public partial class ABC 
{ 
    [Required] 
    [Display(Name = "Transaction No")] 
    public string S1 { get; set; } 
} 

, ama biraz uzun bir prosedürdür: olarak

Benim modelidir. Hazır ve yerleşik bir şey arıyorum.

MemberInfo property = typeof(ABC).GetProperty(s); // s is a string type which has the property name ... in this case it is S1 
var dd = property.CustomAttributes.Select(x => x.NamedArguments.Select(y => y.TypedValue.Value)).OfType<System.ComponentModel.DataAnnotations.DisplayAttribute>(); 

Ama Önce değerini yani "İşlem Hayır" almıyorum, 2 sorunları var:

Yani, bu çalıştılar. Ve ikinci olarak, .OfType <>'dan bahsettiğim halde yine de tüm öznitelikleri alıyorum [Ekran (Ad = "")] ve [Zorunlu].

Ama neyse ki ben CustomAttribute >>

özelliğinde "İşlem Hayır" değerini alıyorum >> [1] >> NamedArguments >> [0] >> TypedValue >> Değer = "İşlem yok "

yana TypedValue.Value gerekli değere sahiptir, Peki nasıl alabilirsiniz?

cevap

11

Bu çalışması gerekir:

MemberInfo property = typeof(ABC).GetProperty(s); 
var dd = property.GetCustomAttribute(typeof(DisplayAttribute)) as DisplayAttribute; 
if(dd != null) 
{ 
    var name = dd.Name; 
} 
+0

TEŞEKKÜRLER .. Benim için çalıştı .. ** typeof (ABC) ** // veya özellik gerektiren model –

+0

Denedim ama değer taşınmaz. Modelimin değeriyle değiştirmeyi denedim. Ama ben memberinfo mülkte vurgulu zaman .... özellik boş. bu neden? Bilmiyorum çünkü benim model değerim enum? Bunu nasıl düzeltebilirim? Bu benim satırım: typeof (MyProject.Dom.Title) .GetProperty (Card.Title.ToString()) – Nurul

+1

@Nurul, Yorum "burada benim kodum, neden çalışmıyor" gibi soruları sormak için bir yer değil . Lütfen ayrı bir soru olarak gönderin ve kodunuzu ekleyin. –

0

Alex Art'ın cevabı neredeyse benim için çalıştı. dd.Name yalnızca özellik adını döndürdü, ancak dd.GetName(), metni Display özniteliğinden verdi.

+0

C# 6'nın nameof() operatörünü denediniz mi? –

+0

@KunalMukherjee Sadece "Ekran" özniteliğinden değil, özellik adının da döndüğünü denedi. –

İlgili konular