簡體   English   中英

禁用的必需驗證器仍會導致驗證

[英]Disabled required validator still causes validation

我使用validatorEnable(也嘗試使用.Enabled)設置禁用了jQuery中的驗證器,以使錯誤消息消失,但該表單對於該驗證器仍然無效。

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.");
                }
            }

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) 

...在執行驗證之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM