J'ai un formulaire contenant une liste de champs de saisie que l'utilisateur remplit avec des prix (nombres). J'ai défini leurs classes css sur "required" et "number" pour que le plugin de validation jQuery les valide en conséquence. Tout cela fonctionne parfaitement bien. Les erreurs sont affichées lorsque chaque champ n'est pas un nombre ou que la valeur est manquante, etc.ASP.Net + plugin de validation jQuery + jQuery + UpdatePanel + nyroModal - le succès de chaque champ!
L'intégralité de ce formulaire se trouve dans une fenêtre contextuelle du modèle nyroModal (plugin jQuery). Mais cela ne devrait pas importer, c'est juste un formulaire Web .aspx indépendamment. Dans ce cadre, j'ai également utilisé un UpdatePanel et mis tout ce qu'il contient, car ma forme est essentiellement un processus en deux étapes. L'utilisateur doit remplir certaines étapes de base sur la première page du formulaire. Quand cela valide et fonctionne, je cache/montre juste quelques éléments dans le UpdatePanel pour montrer à l'utilisateur la prochaine 'page' du formulaire, qui est tous les champs de saisie de textbox de prix comme décrit ci-dessus. J'utilise ImageButton comme point de déclenchement pour valider le formulaire. Par défaut, si vous laissez juste un ImageButton tel qu'il est, .Net déclenchera une publication, AJAX dans mon cas, car tout se passe dans un UpdatePanel. Lequel, encore une fois, est désiré. Je ne veux pas une publication complète laide pour des raisons évidentes. Après beaucoup de lecture, j'avais besoin d'un moyen de joindre au PageRequestManager de .Net en javascript pour que je puisse intercepter quand .Net voulait faire une publication, selon si jQuery avait validé le formulaire ou non. Donc ma logique dit: Par défaut, n'autorise pas les postbacks, mais quand jQuery valide le formulaire, définissez une variable qui dit que les postbacks sont maintenant autorisés, puis la prochaine fois qu'un postback essayera de se produire, il passera. Et donc afficher le succès à l'utilisateur.
Cela fonctionne raisonnablement bien, mais il y a un dernier problème. L'option validate ({success}) du plug-in de validation de jQuery semble se déclencher à tort une fois la validation réussie sur chaque champ et non sur l'intégralité du formulaire. C'est à dire. si je saisis un nombre dans l'un des champs de saisie des prix, cette option de succès se déclenchera et affectera la valeur false à la variable cancelPostback, ce qui signifie que le formulaire est soumis même s'il n'a pas été validé valide. Je m'attendais à ce que cette option de validation ({succès}) ne se déclenche qu'une fois que le formulaire entier a été validé. Est-ce que j'ai interprété cela incorrectement, et en fait c'est ce qu'il a fait pour être? Si oui, comment puis-je simplement définir ma variable cancelPostback sur true UNIQUEMENT lorsque le formulaire ENTIER est validé?
Remerciements pour des idées ou des heads up.
Mon code jQuery pour mettre en œuvre la validation et intercepter également l'événement postback .Net est la suivante:
<script type="text/javascript">
// By default, don't allow Postback until we've successfully validated our form on the client-side.
var cancelPostback=true;
// Every single time the page loads, including every single AJAX partial postback
function pageLoad()
{
// Reset the value to say that "We don't allow Postbacks at this stage"..
cancelPostback=true;
// Attach client-side validation to the main form
$("#<%= form1.ClientID %>").validate({ success: function() { alert('validation succeeded!'); cancelPostback = false; } });
// Grab a reference to the Page Request Manager
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(onEachRequest);
alert("Page Load");
}
// Our own custom method to be attached to each new/future page request..
function onEachRequest(sender, args)
{
alert("About to cancel? " + cancelPostback);
// Check to see if we need to Cancel this Postback based on Conditional Logic within this page..
args.set_cancel(cancelPostback);
}
</script>
+1 En effet plus élégant! – Icarus
J'ai jquery validation plugin et updatepanel, plus tôt, j'ai eu un problème de message d'erreur disparaît en quelques secondes. Maintenant, il est géré par le code ci-dessus, fonctionne comme je le voulais. – Balaji