2012-03-06 39 views
0

嗨,大家好,我們已經在我們的項目的頁面的一個結構如下:asyncpostbacktrigger控件內的Postbacktrigger控件?

<asp:UpdatePanel ID="up1" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="tabContainer" EventName="ActiveTabChanged" /> 
     </Triggers> 

    <ContentTemplate> 


     <cc1:TabContainer ID="tabContainer" runat="server" Visible="false" ActiveTabIndex="0" AutoPostBack="true" OnActiveTabChanged="BtnTrigger_Click"> 
      <cc1:TabPanel ID="tab1" runat="server" HeaderText="tab1"> 
       <ContentTemplate> 
        <uc:userControlFirst ID="uc1" runat="server" /> 
        <uc:userControlSecond ID="uc2" runat="server"/>             
       </ContentTemplate> 
      </cc1:TabPanel>.... 
     </ContentTemplate> 
     </asp:UpdatePanel> 

我們要更新的UpdatePanel每次用戶更改標籤。問題是在uc2控件中,我們有gridbut和linkbuttons來下載報告(.xlsx),因爲uc2在asyncpostback觸發器的控制之內,每次我們點擊linkbutton,updatepanel更新而不是整個頁面,所以我們無法下載報告。

以前當TabContainer的不是asyncpostbactrigger,我們可以註冊GridView控件由回傳控制:

ScriptManager.GetCurrent(Page).RegisterPostBackControl(this.gvInsertionHistory); 

但不幸的是它停止工作。

是否有任何方法來註冊這些linkbuttons甚至整個gridview或uc2作爲回發控制,即使他們在asyncpostbackcontrol?

什麼是使用EventName屬性的原因?它設置爲ActiveTabChanged,但每次點擊tabContainer內的某個內容時,updatepanel都會更新。

我試過在標記中添加uc2作爲PostbackTrigger,但它看起來不可能/不允許。將childrenAsTrigger設置爲false也沒有幫助。

我將不勝感激任何想法。

回答

0

在深入研究之前,請嘗試使用基於Querystring的方法,方法是將下載按鈕重寫爲與QueryParamters鏈接 - 而不是回發按鈕 - 以導出xlsx。這總是會導致整頁加載(只要你不使用框架)。產生這樣的事情:

<a href="?ID=1&Format=xlsx">download</a> 

,並在Page_Load檢查

if (Request.Querystring["Format"] == "xlsx") 
{ 
    //Response.Write(...render xlsx method) 
} 

編輯:你甚至可以target="_blank"的鏈接,以保持當前頁面視圖,因爲它是

+0

嗨,這可能將工作,但我發現更簡單的解決方案。我剛剛在LinkBut​​ton上設置了PostbackUrl =「<哪個控件是>的頁面」,並且它會回發,但並未刷新整個頁面。第二個認爲我們已經發現,我們的異步PostScript不是必需的,因爲tabcontainer在updatepanel內。 – Kostrzak 2012-03-07 10:49:10