Asp.net asp:CustomValidator未返回';假';

Asp.net asp:CustomValidator未返回';假';,asp.net,login,customvalidator,validationgroup,Asp.net,Login,Customvalidator,Validationgroup,我不知道这里出了什么问题。这是一个由其他人开发的页面,我正在尝试修复其中一个问题 情景: ASP.NET网站 Login.aspx有,有三个验证组。 Login.aspx.cs是“用户登录”的一部分类 每个验证组都有一个文本框和一个关联的customvalidator。当在相应的文本框中输入内容时,会触发所有三个自定义验证器,但当验证失败时,只有第一个文本框(绑定到validationgroup=1)返回false 对于第二个和第三个,将触发customvalidator,但当出现验证问题时,即

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

情景:

ASP.NET网站

Login.aspx有
,有三个验证组。 Login.aspx.cs是“用户登录”的一部分类

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

对于第二个和第三个,将触发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;
        }
    }
}

受保护的void NewUserNameCheck\u ServerValidate(对象源,ServerValidateEventArgs args)
{
CustomValidator validator=源作为CustomValidator;
if(验证器!=null)
{
字符串NewuserNameValue=this.NewUserName.Text;
Guid registeredUserId=(Guid)Membership.GetUser(NewuserNameValue.ProviderUserKey;
if(registeredUserId!=null)
{
validator.IsValid=false;
this.FailureText\u New.Text=“此用户ID已存在。请以现有用户身份登录”;
args.IsValid=false;
}
}
}

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

此处不显示代码。。仍然trying@jadarnel27:我不知道你是否修改了我的代码。如果它是我最初发布的自定义验证器代码,那么它对我来说仍然不起作用。你能展示一下javascript函数NewUserNameCheck\u ServerValidate吗?没关系。我把OnServerValidate和OnClientValidate混淆了。ASP.NET服务器端验证的有趣之处在于它不会自动阻止您的单击事件执行。就好像执行了验证程序,然后忽略了结果。因此,要放入按钮事件中的第一件事是
if(!Page.IsValid)return。这就是阻止其余事件执行的方法,也是强制用户更正表单上任何错误的方法。谢谢John。这节省了我很多时间。据推测,页面上的其他(非自定义)验证器也有一个动态签入JavaScript,这会阻止按钮发回服务器,从而隐藏这种行为。