1

ここにある.net 1.1プロジェクトで古いバージョンのRecaptcha Validatorを使用しようとしています: http://recaptcha.googlecode.com/svn/trunk/recaptcha-plugins/dotnet-old/src/Recaptcha /

私が持っているコードは、上記のリンクにある例と非常によく似ています。

<asp:TextBox ID="EmailAddress" runat="server"></asp:TextBox>
<recatpcha:RecaptchaValidator ID="RecaptchaValidator1" runat="server" Theme="Clean" PublicKey="xxxxxxxxxxxxxx" PrivateKey="xxxxxxxxxx" ControlToValidate="EmailAddress"></recatpcha:RecaptchaValidator>
<asp:Button ID="Button1" runat="server" Text="Button" CausesValidation="true" OnClick="Button1_Click" />

私が望んでいる動作は単純です。ページの読み込み時に、ユーザーにメールアドレスを入力するフィールド、完了するキャプチャ、および送信ボタンが表示されます。送信時に、その電子メール アドレスを持つユーザーがデータベースに見つからない場合、またはキャプチャの回答が間違っている場合、適切なエラー メッセージと共に新しいキャプチャが表示されます。それ以外の場合は、パスワードのリセット方法に関するメールが送信されます。

主な問題は、キャプチャがページの読み込み時に表示されないことです。ただし、送信ボタンを押して Page.Validate() をトリガーすると、ページがリロードされ、キャプチャが表示されます。

これに基づいて、別のアプローチを試して、ページ読み込みイベントで Page.Validate() を呼び出して、キャプチャを最初に表示させることにしました。これはほとんど機能しました。最初のページの読み込み時にキャプチャが表示されましたが、無効な電子メールが正しいキャプチャの回答とともに送信された場合、ページがリロードされるとキャプチャは消えますが、もちろん、電子メールは送信できません。

ページが最初にヒットしたときにキャプチャを強制的にレンダリングするか、無効な電子メールアドレスが入力されたときにキャプチャが送信されないようにするにはどうすればよいですか?

4

1 に答える 1

1

まあ、それはきれいではありませんが、私はそれを機能させました。

RecaptchaValidatorタグを使用しても期待どおりに機能しなかったため、recaptcha AJAX API(http://recaptcha.net/apidocs/captcha/client.html)を使用してウィジェットをページに埋め込みました。

$(document).ready(function() {
    Recaptcha.create("<public key>",
        "ReCaptcha", {
        theme: "clean",
        callback: Recaptcha.focus_response_field
    });
});

次に、すべてのデータをrecaptchaサーバーで検証する必要があるため(チャレンジ、パブリックキーなど、詳細はこちら:http : //recaptcha.net/apidocs/captcha/)、POSTにあるため、新しいRecaptchaValidatorをインスタンス化し、設定します。残りのプロパティ、およびユーザーの応答を検証するためのメソッドを呼び出しました。

protected void Submit_Click(object sender, System.EventArgs e) 
{
    RecaptchaValidator RecaptchaValidator1 = new RecaptchaValidator();
    RecaptchaValidator1.Page = this;
    RecaptchaValidator1.PrivateKey = "<private key>";
    RecaptchaValidator1.PublicKey = "<public key>";

    bool CaptchaPassed = RecaptchaValidator1.ValidateUserResponse();

    if (CaptchaPassed)
    {    
        //hide the captcha, do some stuff
    }       
}

確かに少しハッキーですが、それは仕事を成し遂げました。

注-質問でこれについて言及しましたが、繰り返しになりますが、このためのサーバー側のコードは、古い.NET1.1互換のrecaptchaプラグインを使用しています。プラグインのコードへのリンクが問題になっています。恥ずかしいほど低い担当者がいて、これ以上ハイパーリンクを使用できません>。<

于 2010-04-06T21:48:05.877 に答える