1

ここで何が悪いのかわかりません。これは他の誰かによって開発されたページであり、私は問題の 1 つを修正しようとしています。

シナリオ:

ASP.NET サイト。

Login.aspx<asp:login>には 3 つの検証グループがあります。Login.aspx.cs は、"user_login" の部分クラスです。

各検証グループには、テキスト ボックスと関連する customvalidator があります。3 つのカスタム バリデーターはすべて、対応するテキスト ボックスに何かが入力されるとトリガーされますが、最初のテキスト ボックス (validationgroup = 1 にバインド) のみが、検証が失敗したときに false を返します。

2 番目と 3 番目では、customvalidator がトリガーされますが、検証の問題があり、「args.IsValid = false;」を設定した後でも、さらに実行する必要があるプロセスが続行されます。

ここで何が間違っているのかわかりません。customvalidator が false を返すようにしたいと思います。最悪の場合、検証が失敗したときにコントロールを「テキストボックス」に戻す方法はありますか?

以下は、使用されたカスタムバリデータです。

<asp:CustomValidator ID="ExistingIdValidator" runat="server" ControlToValidate="NewUserName" 
    ValidateEmptyText="true" ValidationGroup="NewUserForm" 
    OnServerValidate="NewUserNameCheck_ServerValidate">
</asp:CustomValidator> 


protected void NewUserNameCheck_ServerValidate(object source, ServerValidateEventArgs args)
{
    CustomValidator validator = source as CustomValidator;
    if (validator != null)
    {
        string NewuserNameValue = this.NewUserName.Text;
        Guid registeredUserId = (Guid)Membership.GetUser(NewuserNameValue).ProviderUserKey;
        if (registeredUserId != null)
        {
            validator.IsValid = false;
            this.FailureText_New.Text = "This UserID already exists. Please login as existing user";
            args.IsValid = false;
        }
    }
}
4

1 に答える 1

2

ASP.NET サーバー側検証の面白い点は、クリック イベントの実行が自動的に妨げられないことです。検証手順が実行され、結果が無視されるかのようです。したがって、ボタンのイベント内に最初に配置するのはif (!Page.IsValid) return;. そうすることで、残りのイベントが実行されないようにし、ユーザーにフォームの間違いを修正させることができます。

于 2013-02-21T17:58:18.973 に答える