I a créé une simple validation personnalisée pour prendre le temps que entrée est dans un format de 12 heures et l'entrée de texte a un '99: jeu de masque 99' , donc je vais obtenir:ASP.NET MVC personnalisée validation
12 : 00
la validation fonctionne très bien sur le serveur:
private ValidationResult ValidateTwelveHourFormat(string time, ValidationContext validationContext)
{
if (String.IsNullOrWhiteSpace(time.Substring(0, 1))
|| Convert.ToInt32(time.Substring(0, 1)) > 1
|| Convert.ToInt32(time.Substring(1, 1)) > 2
|| Convert.ToInt32(time.Substring(3, 1)) > 5)
{
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
return ValidationResult.Success;
}
Cependant, la même validation sur le client ne se comporte pas comme j'attendre:
$.validator.unobtrusive.adapters.addSingleVal('timeformat', 'format');
$.validator.addMethod('timeformat', function (value, element, timeformat) {
if (value) {
if (timeformat == "TwelveHour") {
if (value.toString().substring(0, 1) == ""
|| value.toString().substring(0, 1) > 1
|| value.toString().substring(1, 1) > 2
|| value.toString().substring(3, 1) > 5) {
return false;
}
}
}
return true;
});
Le client validera correctement le premier chiffre seulement. Donc, si je suis entré dans un 3, il se déclencherait bien, mais pas pour d'autres positions dans la chaîne. J'ai jeté quelques alertes là-dedans et il semble déclencher la méthode quand j'entre un caractère dans le texte. Ce comportement m'embrouille parce que je ne pensais pas que cela se déclencherait avant que le formulaire ait été soumis, seulement après. Dans le cas contraire, l'utilisateur verrait des messages d'erreur lors de leur entrée dans le formulaire la première fois et je ne crois pas que les jives avec la validation de manière fonctionne généralement.
1.) Pourquoi le côté client ne valide-t-il pas correctement les autres positions de caractères?
2.) Pourquoi le client valide-t-il quand le formulaire n'a pas encore été soumis?
Mise à jour
1.) Je le substr de JavaScript() utilisé comme il agit comme C# 's String.substring().
Pour la question 2 - J'utilise des annotations de données avec le framework mvc. Disons que j'ai un champ défini pour être requis. Lorsque j'entre ce formulaire pour la première fois, ce champ ne déclenche pas de validation sur le flou. Je peux entrer dans la merde, enlever la merde, mais pas déclencher la validation. Voilà pourquoi je suis confus. Il semble différer du comportement par défaut. Je pense que la validation serait déclenchée après une tentative de soumission est tentée comme l'exemple que j'ai mentionné.
javascript a 'substr' si – Esailija
@Esailija son code utilise 'String.substring() ', donc je suis juste en train d'expliquer pourquoi ça ne marche pas comme il s'y attend. Consultez le lien. –
Eh bien, je voulais juste le mettre là-bas que vous pourriez le suggérer au lieu d'essayer de comprendre ce que l'index de fin doit être dans 'substring' – Esailija