reCAPTCHAが提供する ASP.Net プラグインとコントロールを使用しています。Web フォームの送信ボタンが検証グループにない場合、コントロールを正常に動作させることができます。reCAPTCHA コントロールの validationgroup 属性はありません。
Webフォームに検証グループがあるときにreCAPTCHAコントロールを機能させるために、これまたは何らかの解決策で成功した人はいますか?
いくつかの作業コードを使用して、他の数人のコメントを拡張したいと思いました...
<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に割り当てることができます。
reCAPTCHA ASP.NET プラグインは、ASP.NET 1.1 と下位互換性を持つように作成されています。つまり、このValidationGroup
概念 (ASP.NET 2.0 の新機能) はサポートされていません。ただし、プラグインにはダウンロード可能なソース コードが付属しているため、サポートするように自分で変更できますValidationGroup
。
ASP.NET 2.0 では、バリデータは を継承しBaseValidator
て実装IValidator
する必要がありBaseValidator
ますWebControl
。で定義されているすべてのメソッドとプロパティを実装するには、コードを少し変更する必要がありますBaseValidator
。次に、代わりにこの新しいコントロールをページで使用できます。これは現在サポートされていますValidationGroup
。
これは私のために働いた...
正しい検証グループを持つカスタム バリデーターを追加します。
その ServerValidate メソッド呼び出し..
recaptcha.Validate();
次に、メイン処理の前に次のように確認します...
if (Page.IsValid && recaptcha.IsValid) { respose.write("valid"); }
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 標準準拠の (作成者であると言えますが :-) 実装が含まれています。