asyncpostbacktrigger控件中的Postbacktrigger控件?

时间:2012-03-06 16:54:32

标签: c# asp.net ajax triggers updatepanel

大家好,我们在项目的一个页面中有以下结构:

  <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控件中,我们有gridview和链接按钮来下载报告(.xlsx),因为uc2是内部控件,它是asyncpostback触发器,每次我们点击linkbutton,updatepanel更新而不是整页,所以我们不能下载报告。

以前当tabContainer不是asyncpostbactrigger时,我们可以通过以下方式将gridview注册为回发控制:

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

但不幸的是它停止了工作。

有没有办法将这些链接按钮甚至整个gridview或uc2注册为回发控制,即使它们位于asyncpostbackcontrol中?

使用EventName属性的原因是什么?它设置为ActiveTabChanged但每次我们点击tabContainer中的内容时都会更新updatepanel。

我也尝试在标记中添加uc2作为PostbackTrigger,但它看起来不可能/允许。将childrenAsTrigger设置为false也没有用。

我会感激任何想法。

1 个答案:

答案 0 :(得分: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"链接保留当前的网页浏览量