Bonjour
J'ai essayé de mettre un validator sur une CheckBox, mais il est pas d'accord je n'arrive pas à comprendre pourquoi ?
Comment vous faites pour contrôler qu'une CheckBox est Checked ou pas ?
Merci pour votre aide.
Bonjour
J'ai essayé de mettre un validator sur une CheckBox, mais il est pas d'accord je n'arrive pas à comprendre pourquoi ?
Comment vous faites pour contrôler qu'une CheckBox est Checked ou pas ?
Merci pour votre aide.
Vite fait, au passage, sans garantie de résultat:
il existe une propriété initial value sur le requiredfield validator.
Si tu mets -1 à cette propriété et que la value de tes checkbox est différente, tu devrais pourvoir les valider.
Sinon en javascript c'est vite fait.
Merci pour ton aide.
J'ai essayé et j'ai toujours le même message, à l'affichage de la page, direct
Pour le Javascript, je sais pas comment interrompre le PostBackLe contrôle 'cbAcceptCondition' référencé par la propriété ControlToValidate de 'rfvChk' ne peut pas être validé.
Bon, ben je patauge encore. J'ai choisi la voie du JScript, mais j'arrive pas bien à implanter le bidule.
J'ai mis un Attribute sur le bouton et j'ai mis une Function dans le <srcipt></script>.
Mais visiblement il ne rentre même pas dans cette fonction lorsque je clique.
Vous n'auriez pas un squelette de code ?
Que veux tu faire précisément ?
En gros, tu vérifies qu'une checkbox est cochée avant de valider une page et de rediriger un user ?
Jettes un coup d’œil sur ce bout de code. Peut être que ça pourrait t'aider:
Code : Sélectionner tout - Visualiser dans une fenêtre à part <script type="text/javascript"> var validateAcceptCondition = function(source, args){ args.IsValid = $get('<%=cbAcceptCondition.ClientID%>').checked; } </script> <asp:CustomValidator ID="cvAcceptCondition" runat="server" ClientValidationFunction="validateAcceptCondition" Text="Vous devez accepter les conditions" ValidationGroup="Condition" /> <asp:CheckBox ID="cbAcceptCondition" runat="server" Text="En cochant cette case, j'accepte les conditions ci-dessus" ValidationGroup="Condition" />Enfin, lors du click sur le bouton il ne faut pas oublier de vérifier la validité du formulaire, là aussi c'est trop souvent oublié car la validation est faite côté client via JavaScript sur nos machines.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Protected Sub cvAcceptCondition_ServerValidate(ByVal source As Object, _ ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) _ Handles cvAcceptCondition.ServerValidate args.IsValid = cbAcceptCondition.Checked End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part Page.Validate("Condition") If Page.IsValid Then ' do something here End If
Merci Calagan99.
Je viens de lire en détail le code que tu m'as donne. Vraiment très bien foutu comme truc.
Sauf que, dans mon cas j'ai un gros soucis : ma checkBox n'est pas dans ma page, mais générée par un code. Et en plus, ma checkBox ne sera pas là systématiquement, lorsque je le gars à valider, ont ne lui représente plus la bestiole.
De faite, dans tout le bout de coed dés que y a marqué "cbAcceptCondition" je sais pas quoi mettre à la place. Par contre, peut être une bon point, ma checkbox générée par du code porte le même nom, tout le temps, j'ai mis ça en dur.
Donc là je me tape une séance d'essai avec des FindControl en pagaille, mais pour la partie Jscript, je ne vois pas comment je vais faire.
Si tu as une idée, je suis preneur.
Bon, ben c'est cool, ma séance de test a été plus courte que prévue.
Vous allez peut être trouver ça bizarre que je sois étonné que ça marche, mais je ne m'attendais pas à ce que cela soit aussi simple.
Je crois que j'ai encore du mal à faire la différence entre le CodeBehind et le côté HTML ou plutôt à comprendre comment on peut inclure l'un dans l'autre dans certains cas.
Bref, voilà comment j'ai modifier la fonction JScript et ça marche :
Et j'y croyais pas jusqu'au moment où j'ai cliqué et que ça a fait ce que j'attendais.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 args.IsValid = $get('<%=CType(Me.FindControl("chkAccepte"), CheckBox).ClientID%>').checked;
Merci à tous.
J'ai parlé trop vite.
Parce que, lorsque mon cod e ne génère pas la checkBox, il me dit :
En s'arrêtant sur la fameuse ligne.La référence d'objet n'est pas définie à une instance d'un objet.
Alors, est ce qu'il est possible de générer une varaible dans le CodeBehind que l'on peut appeler à la place du CType ?
Un truc crade mais rapide: un try catch en JS![]()
Ouais, une solution un poil crade mais qui marche.
Sauf que j'ia voulu faire mon perfectionniste de base et donc j'ai fais autrement.
Alors, dans le détail histoire de filer du code pour les prochains.
Toujours en partant sur la base du code qui est dans le lien que Calanga99 à filé.
Au lieu de mettre le JScript directemetn dans la page côté HTML 'jai fais ça en CodeBehind dans le Page_Init
Et dans le cvAcceptCondition_ServerValidate j'ai mis mon test pour savoir si j'avais créé la checkBox ou pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Me.Page.ClientScript.RegisterClientScriptBlock(Me.GetType, "monScript", "<script type='text/javascript'>var validateAcceptCondition = function(source, args){ args.IsValid = $get('<%=CType(Me.FindControl(""chkAccepte""), CheckBox).ClientID%>').checked; }</script>")
Et voilà, ça marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 If dt.Rows(0).Item("PremiereConnex") = 0 Then args.IsValid = CType(Me.FindControl("chkAccepte"), CheckBox).Checked End If
Cela n'enlève rien à la valeur de la solution du Try Catch en JScript, amis je préfère gérer le biniou dans le CodeBehind pour m'assurer moins de tracas dans l'avenir.
Merci à tous, cette fois, je boucle le topic.
Partager