2012-01-27 96 views
1

不知道这里出了什么问题。这是由其他人开发的页面,我正在尝试解决其中一个问题。asp:CustomValidator不返回'false'

场景:

ASP.NET网站。

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

每个验证组都有一个文本框和一个关联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; 
     } 
    } 
} 
+0

代码不显示在这里..仍在尝试 – Anirudh 2012-01-27 21:39:48

+0

@ jadarnel27:我看不到你是否修改了我的代码。如果它是我原始文章中的自定义验证器代码,它仍然不适用于我。 – Anirudh 2012-01-27 22:25:15

+0

您能否显示JavaScript函数NewUserNameCheck_ServerValidate? – 2012-01-28 00:07:25

回答

0

有关ASP.NET服务器端验证的有趣之处在于它不会自动阻止您的点击事件执行。就好像验证过程被执行,然后结果被忽略。所以,放在按钮事件中的第一件事是if (!Page.IsValid) return;。这就是你如何防止事件的其他部分执行,这就是你如何强制用户纠正表单上的任何错误。