在 asp.net 控件上动态禁用验证

Posted

技术标签:

【中文标题】在 asp.net 控件上动态禁用验证【英文标题】:Dyanamically disable validation on asp.net controls 【发布时间】:2012-07-30 20:19:36 【问题描述】:

根据用户填写表单时的响应,可能需要也可能不需要控件。所有这些控件都附加了验证。例如,如果用户没有在他们的地址居住至少 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>

【问题讨论】:

也许上一个问题的答案会有所帮助。 ***.com/questions/2379445/… 【参考方案1】:

使用 CustomValidator 代替您的 RequiredFieldValidator

例如,您可以按如下方式更改您的 'rfvAddressType' requiredfieldvalidator:

<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/ http://www.4guysfromrolla.com/articles/073102-1.aspx

【讨论】:

效果很好——谢谢。 Rolla 网站的 4 Guys 也确实提供了帮助。问候!【参考方案2】:

尝试在运行时禁用或启用验证器以实现您想要的功能。你可以试试这段代码。我没有测试过。

//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);

【讨论】:

无法使其正常工作...重新编写语法以包括 # 为 ID 签名:ValidatorEnable($('#'), false);

以上是关于在 asp.net 控件上动态禁用验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 启用/禁用特定“验证组”中的 asp.net 验证控件?

Jquery禁用Asp.net核心中的选定选项无法正常工作

ASP.NET Web API 身份验证(Web + 移动)

表单身份验证、ASP.NET MVC 和 WCF RESTful 服务

处理 OAuth 2.0 身份验证 - 在 ASP.NET MVC 应用程序中获取令牌重定向令牌响应

在 ASP.NET 控件上使用 ajax/jQuery 表单验证