2015-09-27 5 views
6

Sto sviluppando un'applicazione MVC 5. Voglio ottenere il valore nell'attributo [Display (Name = "")] nel mio metodo controller per qualsiasi proprietà di qualsiasi classe.Come ottenere il valore nell'attributo [Visualizza (Nome = "")] nel Controller per qualsiasi proprietà utilizzando EF6

Il mio modello è come:

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

ho guardato answer to this question, ma è un po 'lunga procedura. Sto cercando qualcosa di disponibile e integrato.

Così, ho provato questo:

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

Ma ho 2 problemi, prima non ricevo il valore vale a dire "Operazione No". E in secondo luogo anche se ho menzionato .OfType <> Ricevo ancora tutti gli attributi, ad esempio [Visualizza (Nome = "")] e [Richiesto].

Ma per fortuna io sono sempre l ' "Operazione No" valore d'

proprietà >> CustomAttribute >> [1] >> >> NamedArguments [0] >> >> TypedValue Valore = "Operazione No "

Dal TypedValue.Value ha il valore richiesto, Così come posso recuperarlo?

risposta

11

Questo dovrebbe funzionare: la risposta di

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

GRAZIE .. Ha funzionato per me .. ** typeof (ABC) ** // o il modello per il quale è richiesta la proprietà –

+0

L'ho provato ma il valore non è passato alla proprietà. Ho provato a sostituire s con il valore del mio modello. Ma quando passo il mouse sulla proprietà memberinfo .... la proprietà è nullo. perchè è questo? Non so se è perché il mio valore di modello è enum? come posso risolvere il problema? questa è la mia linea: typeof (MyProject.Dom.Title) .GetProperty (Card.Title.ToString()) – Nurul

+1

@Nurul, Comment non è un posto dove fare domande come "ecco il mio codice, perché non funziona" . per favore postalo come una domanda separata e includi il tuo codice. –

0

Alex Art quasi ha funzionato per me. dd.Name ha semplicemente restituito il nome della proprietà, ma dd.GetName() ha restituito il testo dall'attributo Display.

+0

Hai provato l'operatore nameof() di C# 6? –

+0

@KunalMukherjee Ho appena provato che restituisce anche il nome della proprietà, non il testo dall'attributo 'Display'. –

Problemi correlati