已禁用的必需验证程序仍会导致验证

时间:2016-12-05 22:29:11

标签: javascript jquery asp.net .net validation

我在jquery中使用validatorEnable(也尝试使用.Enabled)将false验证器设置为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.");
                }
            }

1 个答案:

答案 0 :(得分: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) 

...在执行验证之前。