2016-12-05 103 views
0

我禁用了验证器在jquery中使用validatorEnable(也尝试使用.Enabled)设置为false错误消息消失,但该表单对该验证器仍然无效。禁用必需的验证器仍然会导致验证

HTML:

<tr> 
    <td class="text-right" style="width: 574px"> 
<asp:Label ID="usernameLabel" runat="server" Text="Username: "></asp:Label> 
    </td> 
    <td style="width: 181px"> 
<asp:TextBox ID="usernameTxt" runat="server"></asp:TextBox> 
    </td> 
    <td> 
     <asp:RequiredFieldValidator ID="usernameRequiredValidator" runat="server" ControlToValidate="usernameTxt" ErrorMessage="Username is required."></asp:RequiredFieldValidator> 
     <br /> 
     <asp:CustomValidator ID="usernameExistsValidator" runat="server" ControlToValidate="usernameTxt" ErrorMessage="This username already exists." OnServerValidate="usernameExistsValidator_ServerValidate"></asp:CustomValidator> 
    </td> 
</tr> 

线以下禁用错误信息消失验证。

ValidatorEnable($("[id*=usernameExistsValidator]")[0], false); 

检查以确保该验证程序是无效的:

foreach (BaseValidator validator in Page.Validators) 
      { 
       if (validator.Enabled && !validator.IsValid) 
       { 
        // Put a breakpoint here 
        string clientID = validator.ClientID; 
        System.Diagnostics.Debug.WriteLine(clientID + "is invalid."); 
       } 
      } 

回答

0

ValidatorEnable功能只禁止在客户端验证。您用于“检查以确定哪个验证程序无效”的代码正在检查服务器端的验证程序。

无论您用什么条件禁用客户端的验证器,都需要在运行验证例程之前在服务器端重新创建它。例如,如果要调用

//Disable validator if user name textbox is empty 
ValidatorEnable($("[id*=usernameExistsValidator]")[0], $("#usernameTxt").val().length > 0); 

然后在服务器端,你应该写

//Disable validator if user name textbox is empty 
this.usernameExistsValidator.Enabled = (this.usernameTxt.Text.Length > 0) 

...在执行验证之前。