2012-03-29 3 views
0

So habe ich ein Problem um ein benutzerdefiniertes Attribut, das ich zu allen erforderlichen Feldern hinzufügen möchte. Jetzt, anstatt alle meine Hilfsklassen zu erweitern, um dieses Attribut bei Bedarf in die Eingabe einzuschließen, habe ich mich gefragt, ob ich viel Zeit sparen und es im benutzerdefinierten Attribut selbst hinzufügen könnte.Hinzufügen von benutzerdefinierten Attribut zu einem Feld über MVC ValidationAttribute Erweiterung

Etwas wie folgt aus:

Modell:

[MyCustomRequiredValidator] < -I wollen es in der public int Validation Erweiterung hinzufügen? myField

Ich kann es natürlich nicht einfach über die ModelClientValidationRule hinzufügen, weil es das Attribut mit Daten-Val-Präfix-das ist nicht gut, aber ich kann nicht scheinen, um Zugriff auf die Attribute selbst. Ich habe versucht mit metadata.AdditionValue.add aber keine Freude dort.

Das Attribut, das ich hinzufügen möchte, ist aria-required = "true" für Screenreader-Unterstützung.

Ist das möglich?

Jeder Rat wäre toll, weil ich eine Wand getroffen habe.

danke fürs schauen.

Antwort

1

OK so für das, was es wert ist, fand ich eine Lösung. Ich habe einen Tag zu den Meta-Daten durch alle erforderlichen Validatoren auf Erstellung der Metadaten (ich musste auch die IMetadataAware Schnittstelle auf der Klassendeklaration erben):

public void OnMetadataCreated(ModelMetadata metadata) { 
    metadata.AdditionalValues.Add("AriaRequired", "true"); 
} 

ich dann die Eingabe alle Feld Helfer erweitert überprüfen für diesen Wert und fügen Sie der Eingabe ein benutzerdefiniertes Attribut hinzu, indem Sie das Vorhandensein des obigen Attributs überprüfen, in diesem Fall AriaRequired.

if (htmlAttributes == null) htmlAttributes = new Dictionary<string, object>(); 

    if (!htmlAttributes.ContainsKey("aria-required")) 
    { 
     ModelMetadata metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
     htmlAttributes.Add("aria-required", metaData.IsAriaRequiredValue()); 
    } 
} 

Hope this Menschen hilft :-)

Verwandte Themen