Comment faire fonctionner reCAPTCHA avec un groupe de validation dans ASP.Net (captcha)
Question
J'utilise le plug-in ASP.Net et le contrôle fournis par reCAPTCHA . Je peux réussir à faire fonctionner le contrôle si le bouton d'envoi du formulaire Web ne se trouve pas dans un groupe de validation. Il n'y a pas d'attribut validationgroup pour le contrôle reCAPTCHA.
Quelqu'un at-il eu du succès avec cela ou avec des solutions pour que le contrôle reCAPTCHA fonctionne lorsqu'il existe un groupe de validation sur le formulaire Web?
La solution
Le plug-in ASP.NET reCAPTCHA est conçu pour être rétro-compatible avec ASP.NET 1.1, ce qui signifie que le concept ValidationGroup
(qui est nouveau dans ASP.NET 2.0) n'est pas pris en charge. Toutefois, le plug-in est livré avec le code source téléchargeable , afin que vous puissiez le modifier vous-même pour prendre en charge ValidationGroup
.
Dans ASP.NET 2.0, validateurs doit hériter de BaseValidator
et implémenter IValidator
, ce qui signifie que vous devez modifier le type RecaptchaControl pour hériter de BaseValidator
au lieu de . WebControl
. Vous devrez ensuite modifier un peu le code pour implémenter toutes les méthodes et propriétés définies dans BaseValidator
. Vous pouvez ensuite utiliser ce nouveau contrôle sur votre page, qui prend désormais en charge ValidationGroup
.
Autres conseils
Je pensais que je voudrais développer les commentaires de quelques autres avec du code de travail ...
<recaptcha:RecaptchaControl ID="RecaptchaControl" runat="server" />
<asp:CustomValidator ID="RecaptchaValidator" runat="server" OnServerValidate="RecaptchaValidator_ServerValidate" ErrorMessage="Recaptcha input invalid." ValidationGroup="SomeValidationGroup" />
Et le code derrière ...
protected void RecaptchaValidator_ServerValidate(object sender, ServerValidateEventArgs e)
{
this.RecaptchaControl.Validate();
e.IsValid = this.RecaptchaControl.IsValid;
}
Quelqu'un peut-il penser à une manière plus simple de le faire? Félicitations à Vidalik pour ses réflexions sur l’utilisation de OnServerValidate.
Vous pouvez ajouter CustomValidator, implémenter OnServerValidate pour valider les données ReCAPTCHA. CustomValidator peut être affecté à n’importe quel groupe de validateurs.
Cela a fonctionné pour moi ...
-
Ajoutez un validateur personnalisé avec le groupe de validation approprié.
-
C'est son appel à la méthode ServerValidate ..
recaptcha.Validate();
-
Vérifiez ensuite les éléments suivants avant le traitement principal ...
if (Page.IsValid & recaptcha.IsValid) { respose.write ("valide"); }
HTH.
La suggestion de RemotecUk a fonctionné pour moi sans ajouter de validateur personnalisé.
protected void button_onclick(object sender, EventArgs e){
recaptcha.Validate();
if(!Page.IsValid && recaptcha.IsValid){
lblError.Text = "Please check your captcha entry";
} else {
//do your thing
}
}
Pour effectuer la validation requise côté client et sans modifier le code source de reCaptcha, j'ai ajouté un CustomValidator à mon formulaire et créé une fonction JavaScript pour valider le champ de texte de saisie.
<asp:CustomValidator ID="reqRecaptcha" runat="server" ClientValidationFunction="validateRecaptcha" Text="Required"></asp:CustomValidator>
Pour connaître le ID
du champ de saisie généré, j'ai consulté le code source de la page et constaté que le champ de saisie était toujours recaptcha_response_field
. (Corrigez-moi si je me trompe.) Sachant cela, j’ai pu créer du JavaScript (en utilisant JQuery et une fonction personnalisée pour vérifier la validité d’un contrôle).
function validateRecaptcha(sender, args) {
args.IsValid = isFieldValid("input[id$='recaptcha_response_field']");
}
REMARQUE: si les développeurs modifient la sortie du contrôle reCaptcha, vous n’êtes peut-être pas au courant du changement entraînant le blocage du validateur.
Voir les contrôles ReCaptchaImage et ReCaptchaValidator faisant partie de la boîte à outils de l'interface utilisateur Web Altairis: http://altairiswebui.codeplex.com/< a>
Il s’agit d’un ensemble de composants Web open source, contenant des solutions plutôt correctes et conformes aux normes ASP.NET (si je puis dire, c’est l’auteur :-) de la mise en oeuvre de ReCaptcha pour Web Forms.