3

現在、登録フォームで MS Captcha を使用しています。フォームが 1 分以内に送信されると、完全に機能します。ただし、フォームに入力した後、ユーザーがアップロードするドキュメントを検索し、最終的にフォームを送信すると、次のようなサーバー エラーが発生することがあります。

[NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。] MSCaptcha.CaptchaControl.ValidateCaptcha(String userEntry) +438

送信ボタンをクリックすると、次のように呼び出しValidateCaptchaます。

Captcha1.ValidateCaptcha(txtCaptcha.Text.Trim());

誰かがこの例外の処理を手伝ってくれますか? 前もって感謝します。

4

1 に答える 1

1

ErrorInputTooFast および ErrorInputTooSlow メッセージを設定していない場合、CaptchaMaxTimeout の時間が経過すると、コードが「NullReferenceException」をスローすることが確認されています。

NullReferenceException なしでこれを機能させるために、次のプロパティも設定しました

ErrorInputTooFast="画像テキストの入力が速すぎました。" ErrorInputTooSlow="画像テキストの入力が遅すぎました。"

私の実装は以下の通りで、CaptchaMaxTimeout を 20 秒に設定して、この問題が続くかどうかを確認しました。

<uc:CaptchaControl ID="CaptchaUserControl" runat="server" Height="50px" ValidationGroup="PageValidationGroup"
                                        CustomValidatorErrorMessage="The text you entered did not match up with the image provided"
                                        Width="180px" CaptchaLength="5" FontColor="#000000" BackColor="#e6db55" NoiseColor="#26557f"
                                        CaptchaLineNoise="None" CaptchaFontWarping="Low" ImageTag="border='1'" CaptchaBackgroundNoise="Medium"
                                        ErrorInputTooFast="Image text was typed too quickly. " ErrorInputTooSlow="Image text was typed too slowly."
                                        CaptchaMaxTimeout="20" CaptchaMinTimeout="2" EnableViewState="False" />
                                   <asp:TextBox ID="CapthaTextBox" runat="server" MaxLength="10" Width="180px"  AutoCompleteType="Disabled"/>

コードビハインド

 private void AppendValidationErrorMessage( string message)
    {
        var cv = new CustomValidator(); 
        cv.IsValid = false;
        cv.ErrorMessage = message;
        cv.ValidationGroup = "PageValidationGroup";
        this.Page.Validators.Add(cv);
    }

    protected void SubmitButtonClick(object sender, EventArgs e)
    {
        try
        {
            this.CaptchaUserControl.ValidateCaptcha(CapthaTextBox.Text.GetTrimValue());
            if (!this.CaptchaUserControl.UserValidated)
            {
                this.AppendValidationErrorMessage(this.CaptchaUserControl.CustomValidatorErrorMessage);
            }
        }
        catch (Exception)
        {
            this.AppendValidationErrorMessage(
                "Captcha expired please please reload the page.Note: please copy the data before refreshing data");
        }
        this.CapthaTextBox.Text = string.Empty;
        if (this.Page.IsValid) //&& this.CaptchaUserControl.UserValidated
        {
            //do something

        }
    }
于 2015-01-30T04:46:36.740 に答える