Comment puis-je avoir une coutume ValidationAttribute rendu comme attribut data-val-xx 'sur le côté client?
-
29-09-2019 - |
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?
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. :)