2012-03-23 73 views
0

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應禁用和形式應張貼。

回答

2

您是否嘗試過使用ValidatorEnable功能?

這是JavaScript函數,可用於關閉客戶端驗證一個ASP.Net;在你的榜樣,你應該能夠做到在您的客戶端的JavaScript以下(你設置enabled屬性):

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

我唯一的其他建議是當國家變爲以觸發異步回發,並刪除狀態驗證器服務器端。

+0

我上面使用的代碼是使用ValidatorEnable函數的替代方法。它完成了同樣的事情,並且在使用中,我得到了相同的結果。 – 2012-03-26 17:14:06

+1

我很確定ValidatorEnable也會刪除客戶端控件和驗證器之間的關聯 - 它不僅僅禁用驗證器,所以它們不完全相同。這是我設法可靠地完成你以後的工作的唯一途徑。 – dash 2012-03-26 18:16:03

相關問題