2015-09-27 13 views
6

Pracuję nad aplikacją MVC 5. Chcę uzyskać wartość w atrybucie [Display (Name = "")] w mojej metodzie kontrolera dla dowolnej właściwości dowolnej klasy.Jak uzyskać wartość w [Atrybut wyświetlania (Name = "")] w sterowniku dla dowolnej właściwości przy użyciu EF6

Mój model jest tak:

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

Szukałem answer to this question, ale to jest trochę długa procedura. Szukam czegoś łatwo dostępnego i wbudowanego.

Tak, próbowałem to:

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>(); 

Ale mam 2 problemy Po pierwsze ja nie otrzymuję wartość to „transakcja nie”. I po drugie, mimo że wspomniałem .OfType <> Ciągle otrzymuję wszystkie atrybuty tj. [Display (Name = "")] i [Required].

Ale na szczęście jestem coraz "Transakcja Nie" wartość w

nieruchomości >> CustomAttribute >> [1] >> NamedArguments >> [0] >> TypedValue >> Wartość = „Transakcja Nie "

Od TypedValue.Value ma wymaganą wartość, więc jak mogę je odzyskać?

Odpowiedz

11

To powinno działać: odpowiedź

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

DZIĘKI .. ​​Działało dla mnie .. ** typeof (ABC) ** // lub model, dla którego wymagana jest własność –

+0

Próbowałem, ale wartość nie została przekazana do własności. Próbowałem zastąpić s wartością mojego modelu. Ale po najechaniu na właściwość memberinfo .... właściwość ma wartość zerową. dlaczego to? Nie wiem, czy to dlatego, że moja wartość modelu to enum? jak mogę to naprawić? to jest moja linia: typeof (MyProject.Dom.Title) .GetProperty (Card.Title.ToString()) – Nurul

+1

@Nurul, Komentarz nie jest miejscem do zadawania pytań typu "tutaj jest mój kod, dlaczego to nie działa" . proszę zamieścić go jako osobne pytanie i podać swój kod. –

0

Alex Art prawie pracował dla mnie. dd.Name po prostu zwrócił nazwę właściwości, ale dd.GetName() zwrócił tekst z atrybutu Display.

+0

Czy próbowałeś operatora nameof() C# 6? –

+0

@KunalMukherjee Próbowałem tylko, że zwraca również nazwę właściwości, a nie tekst z atrybutu 'Display'. –

Powiązane problemy