7

ein Ansichtsmodell gegeben, das wie folgt aussieht:Wie kann ich ein benutzerdefiniertes ValidationAttribute auf der Client-Seite als 'data-val-xx' Attribut darstellen lassen?

public class Login { 
    [Required] 
    public string Username { get; set; } 

    [Required, CustomValidator] 
    public string Password { get; set; } 
} 

und eine Ansicht wie diese (Razor-Syntax hier):

@Html.TextBoxFor(f => f.Password) 

Ich bin das folgende Markup bekommen:

<input type="text" 
     value="" 
     data-val-required="This field is required." /> 

jedoch Ich möchte, dass es auch ein "Daten" -Attribut für meinen benutzerdefinierten Validator enthält.

Ich möchte etwas wie folgt aus:

<input type="text" 
     value="" 
     data-val-required="This field is required." 
     data-val-customvalidator="XYZ" /> 

Wie kann ich erreichen dies mit ASP.NET MVC 3.0?

z. Muss ich ein spezielles Attribut auf meinen benutzerdefinierten Validator legen? Oder registrieren Sie es irgendwo?

Antwort

7

Nun, MSDN gespeichert mich (wie es oft).

http://msdn.microsoft.com/en-us/library/ff398048.aspx

Also zuerst habe ich einen Adapter für meine Validierung Attribut erstellen:

public class CustomAttributeAdapter : DataAnnotationsModelValidator<EmailAttribute> 
{ 
    public CustomAttributeAdapter(
     ModelMetadata metadata, 
     ControllerContext context, 
     CustomAttribute attribute) : 
     base(metadata, context, attribute) 
    { 
    } 

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
    { 
     ModelClientValidationRule rule = new ModelClientValidationRule() 
     { 
      ErrorMessage = ErrorMessage, 
      ValidationType = "custom" 
     }; 
     return new ModelClientValidationRule[] { rule }; 
    } 
} 

(Die ‚Validation‘ Einstellung muss sein Klein dafür zu arbeiten, wie dies das Post-Fix, das als HTML5-Attribut verwendet wird - 'Data-Val-Custom'.)

Dann alles, was ich tun muss, ist es auf Application_Start registrieren.

Ich freue mich auf eine Menge Spaß mit der HTML5-Validierung. :)

Verwandte Themen