0

UpdatePanel を使用しており、CompareValidator を 2 つのテキスト ボックスに配置して、ユーザーが入力したパスワードと確認が同じであることを確認したいと考えています。

これは問題なく動作しています (私は VS2008 を使用しており、.NET 3.5 を使用しています)。小さな問題が 1 つあります。

ユーザーが最初のテキストボックスをクリックするとすぐに、2 番目のテキストボックスに入力する前に検証が開始されます。これは、プログラム的には実際の問題を引き起こしているわけではありません (発生するのは、エラー メッセージが表示され、確認を入力すると消えるだけです) が、テスターはそれが問題であると述べています。「保存」をクリックするまで検証が開始されない限り、UA テストに合格しません。

両方のボックスにテキストを入力するまで、CompareValidator が起動しないようにするにはどうすればよいですか?

編集:

マークアップの例を次に示します。

    <div>
        <div><asp:Label runat="server" ID="lblPassword" Text="Password"/></div>
        <div><asp:TextBox runat="server" TextMode="password" ID="txtPassword" size="25" /></div>    
    </div>
    <div>
        <div><asp:Label runat="server" ID="lblConfirmPassword" Text="Confirm Password"/></div>
        <div><asp:TextBox runat="server" TextMode="password" ID="txtConfirmPassword" size="25" /></div>
    </div>
    <asp:CompareValidator ID="CompareValidator1" ValidationGroup="PublishPassValidation" ControlToValidate="txtPassword" ControlToCompare="txtConfirmPassword" runat="server" ErrorMessage="Passwords do not match"></asp:CompareValidator>

上記は、ページ上の UpdatePanel の ContentTemplate 内に含まれるコントロール内にあります。

(簡潔にするために、CSS クラスとスタイルは削除されています)

4

3 に答える 3

1

検証がパスワード テキスト ボックスではなく確認テキスト ボックスで行われるように切り替えてみてください。この方法では、確認テキスト ボックスを変更するか、フォームが送信されるまで起動しません。また、パスワード テキスト ボックスに必須フィールド バリデーターを設定することもできます。

<div>
    <div><asp:Label runat="server" ID="lblPassword" Text="Password"/></div>
    <div><asp:TextBox runat="server" TextMode="password" ID="txtPassword" size="25" />
         <asp:RequiredFieldValidator runat="server" ID="passwordRequiredValidator"
                                     ControlToValidate="txtPassword"
                                     ValidationGroup="PublishPassValidation"
                                     ErrorMessage="Password is required."  />    
    </div>    
</div>
<div>
    <div><asp:Label runat="server" ID="lblConfirmPassword" Text="Confirm Password"/></div>
    <div><asp:TextBox runat="server" TextMode="password" ID="txtConfirmPassword" size="25" /></div>
</div>
<asp:CompareValidator ID="CompareValidator1" ValidationGroup="PublishPassValidation"
                      ControlToValidate="txtConfirmPassword"
                      ControlToCompare="txPassword" runat="server"
                      ErrorMessage="Passwords do not match">
</asp:CompareValidator>
于 2008-11-15T12:50:37.303 に答える
1

その Validator のクライアント側の検証をオフにすることができます。

EnableClientScript="false"

ただし、これは無効な状態を報告するためにサーバーへのラウンドトリップを意味し、続行する前にページが実際に有効であることを確認する必要があります。

Page.Validate("PublishPassValidation");

if (Page.IsValid)
{
    // Do Stuff
}
于 2008-11-14T23:17:36.867 に答える
1

更新パネルでトリガーとして子供を有効にしているように感じますか?

ユーザーはパスワードボックスで「ENTER」を押していますか? フォーカスを移動した後、何らかの理由で更新パネルが部分的な更新を実行しているかどうかを確認できますか?

その場合、検証がトリガーされます。

于 2008-11-14T23:24:20.050 に答える