reCAPTCHAをASP.NetのValidationGroupで動作させる方法(キャプチャ)
質問
reCAPTCHA が提供するASP.Netプラグインとコントロールを使用しています。 Webフォームの送信ボタンが検証グループにない場合、コントロールを正常に動作させることができます。 reCAPTCHAコントロールのvalidationgroup属性はありません。
これに成功したか、Webフォームに検証グループがあるときにreCAPTCHAコントロールを機能させるソリューションがありましたか?
解決
reCAPTCHA ASP.NETプラグインは、ASP.NET 1.1と下位互換性があるように記述されています。つまり、 ValidationGroup
の概念(ASP.NET 2.0の新機能)はサポートされていません。ただし、プラグインにはダウンロード可能なソースコード。したがって、 ValidationGroup
をサポートするように自分で変更できます。
ASP.NET 2.0では、バリデーター BaseValidator
を継承し、 IValidator
を実装する必要があります。つまり、ではなく
。次に、 BaseValidator
を継承するようにRecaptchaControlタイプを変更する必要がありますWebControl BaseValidator
で定義されているすべてのメソッドとプロパティを実装するために、コードを少し修正する必要があります。次に、代わりにページでこの新しいコントロールを使用して、 ValidationGroup
をサポートするようにできます。
他のヒント
いくつかの実用的なコードを使用して、他の数人のコメントを拡張したいと思います...
<recaptcha:RecaptchaControl ID="RecaptchaControl" runat="server" />
<asp:CustomValidator ID="RecaptchaValidator" runat="server" OnServerValidate="RecaptchaValidator_ServerValidate" ErrorMessage="Recaptcha input invalid." ValidationGroup="SomeValidationGroup" />
そしてコードビハインド...
protected void RecaptchaValidator_ServerValidate(object sender, ServerValidateEventArgs e)
{
this.RecaptchaControl.Validate();
e.IsValid = this.RecaptchaControl.IsValid;
}
誰でも簡単な方法を考えられますか? OnServerValidateの使用に関する考えについてVidalikに称賛を送ります。
CustomValidatorを追加し、ReCAPTCHAデータを検証するOnServerValidateを実装できます。 CustomValidatorは、任意のValidatorGroupに割り当てることができます。
これは私のために働いた...
-
正しい検証グループを持つカスタム検証ツールを追加します。
-
そのServerValidateメソッド呼び出し..
recaptcha.Validate();
-
メイン処理の前に次のように確認してください...
if(Page.IsValid&amp;&amp; recaptcha.IsValid) { respose.write(&quot; valid&quot;); }
HTH。
RemotecUk の提案は、カスタムバリデーターを追加しなくても機能しました。
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
}
}
クライアント側で必要な検証を行い、reCaptchaソースコードを変更せずに、フォームにCustomValidatorを追加し、入力テキストフィールドを検証するJavaScript関数を作成しました。
<asp:CustomValidator ID="reqRecaptcha" runat="server" ClientValidationFunction="validateRecaptcha" Text="Required"></asp:CustomValidator>
生成された入力フィールドの ID
を見つけるために、ページのソースコードを見て、入力フィールドが常に recaptcha_response_field
であることに気付きました。 (間違っている場合は修正してください)これを知って、JavaScriptを作成できました(JQueryとカスタム関数を使用してコントロールの有効性を確認しました)。
function validateRecaptcha(sender, args) {
args.IsValid = isFieldValid("input[id$='recaptcha_response_field']");
}
注:開発者がreCaptchaコントロールの出力を変更した場合、バリデーターが機能するようになった変更に気付かない可能性があります。
Altairis Web UI Toolkitの一部であるReCaptchaImageおよびReCaptchaValidatorコントロールを参照してください: http://altairiswebui.codeplex.com/
Webコンポーネントのオープンソースセットであり、Webフォーム用のReCaptchaの実装は、かなりまともで、ASP.NET標準に準拠しています(作成者であると言えば:-)。