Comment puis-je avoir une coutume ValidationAttribute rendu comme attribut data-val-xx 'sur le côté client?

StackOverflow https://stackoverflow.com/questions/4120792

Question

Étant donné un ViewModel qui ressemble à ceci:

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

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

et une vue comme celui-ci (Razor syntaxe ici):

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

Je reçois le balisage suivant:

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

Cependant, je voudrais pour inclure également un attribut 'Data-' pour mon coutume validateur.

Je veux quelque chose comme ceci:

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

Comment puis-je parvenir avec ASP.NET MVC 3.0?

par exemple. Ai-je besoin de mettre un attribut spécial sur mon validateur personnalisé? Ou enregistrer quelque part?

Était-ce utile?

La solution

Eh bien, MSDN m'a sauvé (comme il le fait souvent).

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

Alors d'abord je dois créer un adaptateur pour mon attribut de validation:

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 };
    }
}

(Le 'ValidationType' réglage doit être en minuscules pour que cela fonctionne, comme cela est le post-fix qui sera utilisé comme un attribut HTML5 - 'data-val-mesure. )

Alors tous besoin I de vous inscrire sur Application_Start.

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(EmailAttribute),
    typeof(EmailAttributeAdapter));

Dans l'attente de beaucoup de plaisir avec la validation HTML5. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top