动态禁用asp.net控件的验证

本文关键字:控件 验证 net asp 动态 | 更新日期: 2024-09-23 12:11:02

根据用户填写表单时的响应,可能需要控件,也可能不需要控件。所有这些控件都附有验证。例如,如果用户至少有2年没有住在他们的地址,我需要验证以前的地址信息;如果没有,我需要跳过验证。

我尝试过用jQuery禁用验证器控件,尽管当验证文本"灰显"时,它仍然会导致验证。

<script src="../../Scripts/jquery-1.6.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $('#ddlSpouseData').change(
            function () {
                var selection = $('#<%= ddlAddressData.ClientID%>').get(0).selectedIndex;
                if (selection == 1) {
                    alert(selection);
                    $('#rfvAddressType').attr('disabled', 'disabled');
                    $('#rfvBAddress').attr('disabled', 'disabled');
                }
            });
    });
</script>
       <table id="MyTable" class="tableModule">
           <tr>
                <td class="tableDataBorder">
                    Data is not available and<br /> will be provided later.
                </td>
                <td class="tableDataBorder">
                    <asp:DropDownList ID="ddlAddressData" runat="server">
                        <asp:ListItem>Please Select</asp:ListItem>
                        <asp:ListItem>Yes</asp:ListItem>
                        <asp:ListItem>No</asp:ListItem>
                    </asp:DropDownList>
                </td>
            </tr>
            <tr class="hideRow">
                <td class="tableDataBorder">
                    Identifying Document
                </td>
                <td class="tableDataBorder">
                    <asp:DropDownList ID="ddlAddressType" runat="server">
                        <asp:ListItem>Please Select</asp:ListItem>
                        <asp:ListItem>Home</asp:ListItem>
                        <asp:ListItem>Office</asp:ListItem>
                        <asp:ListItem>Other</asp:ListItem>
                    </asp:DropDownList>
                    <br />
                    <asp:RequiredFieldValidator ID="rfvAddressType" CssClass="regexError" ControlToValidate="ddlAddressType"
                        runat="server" ErrorMessage="Please select address type" Display="Dynamic"
                        InitialValue="Please Select"></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr class="hideRow">
                <td class="tableDataBorder">
                   Address
                </td>
                <td>
                    <asp:TextBox ID="txtAddress" MaxLength="50" runat="server" CssClass="StdTxtBox"></asp:TextBox><br />
                    <asp:RequiredFieldValidator ID="rfvBAddress" CssClass="regexError" ControlToValidate="txtAddress"
                        runat="server" ErrorMessage="Please enter your address" Display="Dynamic"></asp:RequiredFieldValidator>
                </td>
            </tr>
            </table>

动态禁用asp.net控件的验证

使用CustomValidator而不是RequiredFieldValidator。

例如,您可以更改'rvAddressType'所需的字段验证器,如下所示:

<asp:CustomValidator runat="server" 
     id="valAddressType" 
     controltovalidate="ddlAddressType" 
     onservervalidate="cusCustom_ServerValidate" 
     errormessage="Please select address type" />

然后在服务器上的代码:

protected void cusCustom_ServerValidate(object sender, ServerValidateEventArgs e)
{
        if (ddlAddressType.SelectedItem.Value == "1")             
            e.IsValid = false; // or do any additional validation checks here!    
        else            
            e.IsValid = true;   
}

更多详细信息请点击此处:

  • http://asp.net-tutorials.com/validation/custom-validator/
  • https://web.archive.org/web/20211020145934/https://www.4guysfromrolla.com/articles/073102-1.aspx

尝试在运行中禁用或启用验证器以实现所需的功能。你可以试试这个代码。我还没有测试过。

//Syntax:
ValidatorEnable(ValidatorContronName,Boolean);
//Explanation:ValidatorContronName - This is ClientID of the Validation control.
Boolean - true(Enable) / false(Disable)
//Example:
ValidatorEnable(document.getElementById('<%=rfvAddressType.ClientID%>'), false);