2011-06-02 30 views
5

我有兩個更新面板(讓我們稱它們爲A和B)。在A中,我有一個簡單的複選框。 AutoPostback設置爲true。當您檢查它(或取消選中它)時,它將啓用/禁用同一UpdatePanel中的簡單下拉菜單。兩個UpdatePanel並行工作,一個不更新

UpdatePanel B在其中有一個長時間運行的進程。它觸發了創建下拉的請求,這需要將近2分鐘才能完成。如果我加載頁面並且不觸碰任何東西,則大約2分鐘後構建下拉菜單並完美呈現。但是,如果在這兩分鐘內,我決定檢查我的複選框(並導致面板A的部分回發),則updatepanel B永遠不會呈現。在調試時,我發現它正在成功完成檢索,但實際的面板從不刷新以顯示控件。

我已經嘗試使用UpdateMode =有條件的面板B(以確保它不會受到面板A的干擾)並且它會產生相同的結果。我已經驗證了B.Update()也被調用。

編輯

A組:

<asp:UpdatePanel ID="upMailScrub" runat="server"> 
    <ContentTemplate> 
     <asp:Button ID="btnAnalyzeLaunch" runat="server" onclick="btnAnalyzeLaunch_Click" Text="Analyze Launch" style="display: none" />  
     <table> 
      <tr> 
       <td><asp:CheckBox ID="cbxScrub" runat="server" Checked="true" 
         oncheckedchanged="cbxScrub_CheckedChanged" AutoPostBack="True" /></td><td><label for="cbxScrub">Scrub this campaign</label></td> 
       <td style="padding-left: 10px"> 
        Vendor:&nbsp;&nbsp;<asp:DropDownList ID="ddlScrubVendor" runat="server"> 
         <asp:ListItem Text="LexisNexis" Value="LexisNexis" /> 
        </asp:DropDownList> 
       </td> 
      </tr> 
     </table> 
    </ContentTemplate> 
</asp:UpdatePanel> 

B組:

<asp:UpdatePanel ID="upDdlCampaigns" runat="server" UpdateMode="Conditional"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btnAnalyzeLaunch" EventName="Click" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:HiddenField id="hidAction" runat="server" /> 
     <asp:Panel ID="pnlPleaseWait" runat="server"><img src="style/images/PleaseWait.gif" />&nbsp;Please wait while the Five9 Campaigns are retrieved...</asp:Panel> 
     <asp:DropDownList ID="ddlCampaigns" Visible="false" runat="server" class="required" 
      AutoPostBack="True" OnSelectedIndexChanged="ddlCampaigns_SelectedIndexChanged" /> 
     <asp:Button ID="btnRefreshDDL" runat="server" onclick="btnRefreshDDL_Click" style="display: none" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

有什麼建議?謝謝。

+0

你可以發佈一些代碼嗎? – Jemes 2011-06-02 13:16:53

回答

3

你問得太多,從UpdatePanel的:)

的UpdatePanel不能與2個並行請求的方式工作。考慮做一些Ajax調用來獲得你的結果。

爲什麼你會問,一個基本的原因是每個頁面只有一個視圖狀態。當您從A或B請求UpdatePanel發送/獲取數據時,視圖狀態必須更改爲新的視圖狀態。現在,當你詢問A的結果時,在結束之前,你詢問B的結果,你將得到2個不同的視圖狀態,其中一個視圖狀態將失敗,因爲中間時間有變化。

ViewState不是唯一的想法,在每個更新面板點擊,頁面發回所有輸入帖子到頁面,A和B輸入和頁面裏面的所有其他,這也是一個問題。想象一下,例如,您用輸入A + B觸發UpdatePanel,然後在A結束之前,用相同的輸入觸發B UpdatePanel。現在A,等待A + B的結果,和B相同,但是在中間時間,A的A + B結果現在不同,因爲B已經改變了它們 - 並且失敗了。

+0

這非常有道理!由於Panel A的簡單性,我將通過Javascript來控制它;它只是隱藏/顯示和啓用/禁用。沒有什麼真的很重。我將保持長時間運行的過程作爲頁面上唯一的更新面板,我相信它會起作用。 – 2011-06-02 13:30:57

相關問題