asp:CustomValidator没有返回'false'

时间:2012-01-27 21:38:54

标签: asp.net login customvalidator validationgroup

不知道这里有什么问题。这是由其他人开发的页面,我正在尝试解决其中一个问题。

情景:

ASP.NET网站。

Login.aspx有<asp:login>,有三个验证组。 Login.aspx.cs是“user_login”的部分类。

每个验证组都有一个文本框和一个关联的customvalidator。当在相应的文本框中输入内容时,所有三个自定义验证器都会被触发但是问题只是第一个文本框(绑定到validationgroup = 1)在验证失败时返回false。

对于第二个和第三个,自定义验证器被触发但是当存在验证问题时,甚至在设置“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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

ASP.NET服务器端验证的有趣之处在于它不会自动阻止您的点击事件执行。就像执行验证程序一样,然后忽略结果。因此,放入按钮事件的第一件事是if (!Page.IsValid) return;。这就是你如何阻止事件的其余部分执行,这就是你强迫用户纠正表单上的任何错误的方法。