无法启用/禁用UpdatePanel中嵌入的控件中的验证程序

时间:2012-03-23 21:44:05

标签: asp.net updatepanel requiredfieldvalidator

精氨酸。继承项目非常有趣。特别是当它们不能正常工作时,尤其是当它们包含UpdatePanels时......

我在UpdatePanel中有一个送货地址用户控件。我们需要能够处理国际地址,所以我做的一件事是显示/隐藏州下拉列表,具体取决于所选国家/地区是否为美国。另外,我在该下拉列表上有一个RequiredFieldValidator。

当在应用程序的其他地方的普通页面上使用用户控件时,一切都很棒。但是,在UpdatePanel中,即使JavaScript存在,.NET也没有看到RFV。

Address.ascx:(剪掉)

    <li class="form-list-question question-state">
        <span class="form-label">
          <asp:Label ID="lblState" runat="server" SkinID="FieldLabel" AssociatedControlID="ddlState" Text="State" /></span>
        <asp:DropDownList ID="ddlState" runat="server" SkinID="State" DataSourceID="dsStates" AppendDataBoundItems="true" ViewStateMode="Enabled"
        DataTextField="Name" DataValueField="Abbr" CssClass="required">
            <asp:ListItem Text="" Value=""></asp:ListItem>
        </asp:DropDownList>
        <asp:RequiredFieldValidator ID="rfvState" runat="server" EnableClientScript="true" Display="None" ControlToValidate="ddlState"
        ErrorMessage="State is required." ValidationGroup="Address" />
    </li>

address.js:(剪掉)

        function SetFormByCountry() {
    if (isUsTerritory()) {
        $('.question-state').show();
        if ($('#rfvState').length > 0) {
            $('#rfvState').enabled = true;
        }
    } else {
        $('.question-state').hide();
        if ($('#rfvState').length > 0) {
            $('#rfvState').enabled = false;
        }
    }
}

当前行为:当选择美国以外的国家/地区时,“状态”下拉列表会根据需要消失,但在提交表单时,仍会在现在隐藏的下拉列表中进行验证。没有创建JS错误。

预期行为:鉴于上述情况,应禁用RequiredFieldValidator并发布表单。

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用ValidatorEnable功能?

这是一个ASP.Net javascript函数,可用于关闭客户端验证器;在您的示例中,您应该能够在客户端javascript(您设置enabled属性)中执行以下操作:

ValidatorEnable(document.getElementById('<%=rfvState.ClientID%>'), false);

我唯一的另一个建议是在更改国家/地区时触发异步回发并删除状态验证程序服务器端。