2009-07-16 8 views
3

Problème:Besoin d'un meilleur moyen de valider les cases à cocher ASP.NET en utilisant un plugin de validation jquery?

Je veux valider quelques cases à cocher ASP.NET utilisant le plugin de validation jquery (à l'adresse: http://bassistance.de/jquery-plugins/jquery-plugin-validation/)

Ce qu'il est question:

Il est impossible de définir l'attribut de nom des cases à cocher ASP.NET (ou est-ce?). Elle sera automatiquement, lorsque le contrôle est rendu et peut être récupéré à l'aide

<%= emailCheckBox.UniqueID %> 

Donc deux cases à cocher suivantes:

<asp:CheckBox runat="server" ID="emailAcceptCheckBox" />Email<br /> 
<asp:CheckBox runat="server" ID="phoneAcceptCheckBox" />Phone<br /> 

rendra à:

<INPUT id="ctl00_MainContentPlaceHolder_emailAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$emailAcceptCheckBox"> 
<INPUT id="ctl00_MainContentPlaceHolder_phoneAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$phoneAcceptCheckBox"> 

Peut-être c'est un désordre de mélanger ASP.NET avec le plugin de validation de jquery, mais je préfère le plugin de validation de jquery et ça marche bien avec les entrées et d'autres champs.

Le problème est que le plugin de validation de jquery souhaite regrouper les cases à cocher en utilisant l'attribut name des cases à cocher. Ce nom d'attributs doit être égal à toutes les cases à cocher et un groupe.

Ce que je l'ai fait:

J'ai ajouté une règle à l'aide de toutes les cases jquery:

$("#[id*='AcceptCheckBox']").each(function() { $(this).rules("add", { minchecked: 1 }); }); 

et a ajouté ma propre règle pour vérifier les cases à cocher:

jQuery.validator.addMethod("minchecked", 
function(value, element, param) { 
    var noOfChecked = $("#[id*='AcceptCheckBox']:checked").length; 
      return noOfChecked >= param; 
    }, 
"Error"); 

(Cette règle s'appliquera aux cases à cocher dont les identifiants incluent AcceptCheckBox, mais c'est correct dans cet exemple).

Quand j'appelle:

var result = $("#aspnetForm").validate().form(); 

Il retourne parfaitement si ma validation a réussi ou échoué!

MAIS:

1) Je ne pense pas que ce soit une solution très propre et agréable. Un meilleur conseil?

2) Lorsque j'exécute validate() .form(), il passe par toutes les cases à cocher et, pour chacune d'elles, vérifie toutes les autres cases. Ce n'est vraiment pas nécessaire. Comment puis-je éviter ça?

Répondre

1

Dans l'ensemble, votre code me semble bien. Je pense que vous avez correctement géré la limitation de case à cocher asp: (vous ne pouvez pas spécifier l'attribut 'name' pour asp: case à cocher).

Personnellement, j'utiliserais une case à cocher HTML régulière.

<input type="checkbox" runat="server" ID="emailAcceptCheckBox" name="acceptCheckBox" value="emailAccepted" /><label for="emailAcceptCheckBox">Email</label><br /> 
<input type="checkbox" runat="server" ID="phoneAcceptCheckBox" name="acceptCheckBox" value="phoneAccepted" /><label for="phoneAcceptCheckBox">Email</label><br /> 

(j'ai ajouté une étiquette d'étiquette de sorte que l'utilisateur peut cliquer sur l'étiquette (cible plus) pour cocher/décocher la case à cocher.Ci-dessus va simplifier votre code jQuery.

Sur votre code côté serveur, vérifiez Request.Form ["acceptCheckBox"] pour voir ce qui est vérifié et ce qui ne l'est pas.

+0

Salut SolutionYogi Merci pour la réponse. Vous avez raison. Il est plus agréable de créer des zones de saisie avec html- -tags au lieu des contrôles ASP.NET. Mais dans un problème spécifique (pas l'exemple ci-dessus), les cases à cocher sont construites côté serveur et ajoutées à un PlaceHolder sur le client. Donc, je voudrais rester avec les contrôles ASP.NET. Je viens juste de finir de faire une solution, qui est également très bonne. J'ai regardé la validation jquery-plugin et ajouté ma propre règle et fait de petits hacks ici et là, donc ça fonctionne maintenant avec ASP.NET-cases à cocher aussi! –

Questions connexes