2016-12-05 96 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) 

...在執行驗證之前。