精氨酸。继承项目非常有趣。特别是当它们不能正常工作时,尤其是当它们包含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并发布表单。
答案 0 :(得分:2)
您是否尝试过使用ValidatorEnable功能?
这是一个ASP.Net javascript函数,可用于关闭客户端验证器;在您的示例中,您应该能够在客户端javascript(您设置enabled属性)中执行以下操作:
ValidatorEnable(document.getElementById('<%=rfvState.ClientID%>'), false);
我唯一的另一个建议是在更改国家/地区时触发异步回发并删除状态验证程序服务器端。