Arg。繼承項目非常有趣。尤其是當他們沒有很好地工作,更尤其是當它們包含的UpdatePanel ...無法在UpdatePanel中嵌入的控件中啓用/禁用驗證程序
我有一個UpdatePanel內送貨地址的用戶控制。我們需要能夠處理國際地址,因此我所做的一件事就是顯示/隱藏州下拉菜單,取決於所選國家是否爲美國。另外,我在該下拉列表中有一個RequiredFieldValidator。
當用戶控件在應用程序其他地方的普通頁面上使用時,一切都很好。但是,在UpdatePanel中,即使JavaScript使用.NET,.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應禁用和形式應張貼。
我上面使用的代碼是使用ValidatorEnable函數的替代方法。它完成了同樣的事情,並且在使用中,我得到了相同的結果。 – 2012-03-26 17:14:06
我很確定ValidatorEnable也會刪除客戶端控件和驗證器之間的關聯 - 它不僅僅禁用驗證器,所以它們不完全相同。這是我設法可靠地完成你以後的工作的唯一途徑。 – dash 2012-03-26 18:16:03