2016-05-06 12 views
1

Wie kann ich das MaxLength-Attribut aus dem TagHelper ModelExpression abrufen?TagHelper erhalten MaxLengthAttribute-Attribut von ForExpression

habe ich der Lage sein, diese 5 in MVC

var member = expression.Body as MemberExpression; 

var maxLength = member?.Member 
    .GetCustomAttributes(typeof(MaxLengthAttribute), false) 
    .FirstOrDefault() as MaxLengthAttribute; 

ich die MaxLength-Attribut erhalten tun müssen, um die auf dem Modell ist - Beispiel:

[MaxLength(5)] 
[Display(Name = "First Name")] 
public string FirstName { get; set; } 

Die TagHelper macht die ModelExpression aussetzen . Metadaten. Display Attribut und andere, aber nicht die MaxLength oder die StringLength Attribute

+0

Sie versuchen, den Wert des Attributs 'MaxLength' für eine bestimmte Eigenschaft auf Ihrem Server zuzugreifen, richtig? – mariocatch

+0

Ja, auf das Attribut und den Wert zugreifen – AdroitOldMan

Antwort

0

Hier wird die Art und Weise ist jede Validator Metadaten zu erhalten:

ForExpression Variable auf ModelExpression über die HtmlAttributeName gesetzt

[HtmlAttributeName("for")] 
    public ModelExpression ForExpression { get; set; } 

Dann Verwenden Sie die PropertyAttributes-Auflistung, um die gewünschte Eigenschaft zu erhalten

var maxLengthAttribute = ForExpression.Metadata.ValidatorMetadata.OfType<MaxLengthAttribute>().FirstOrDefault(); 

Geändert, um Reflektionen zu vermeiden, siehe (Exposing model attributes)