asyncpostbacktrigger控件中的postbacktriger控件

本文关键字:控件 postbacktriger asyncpostbacktrigger | 更新日期: 2023-09-27 18:27:00

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

  <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在控件内部,它是异步回发触发器,所以每次我们单击链接按钮时,updatepanel都会更新,而不是整个页面,所以我们无法下载报告。

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

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

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

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

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

我也尝试在标记中添加uc2作为PostbackTrigger,但看起来这是不可能/不允许的。将childrenAsTrigger设置为false也无济于事。

如果有任何想法,我将不胜感激。

asyncpostbacktrigger控件中的postbacktriger控件

在深入了解这一点之前,请尝试基于Querystring的方法,将下载按钮重写为带有Queryparameters的链接,而不是回发按钮,以导出xlsx。这将始终导致整个页面加载(只要您不使用框架)。生成这样的东西:

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

并且在Page_Load检查中

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

编辑:您甚至可以target="_blank"链接来保持当前页面视图,因为它是