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也无济于事。
如果有任何想法,我将不胜感激。
在深入了解这一点之前,请尝试基于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"
链接来保持当前页面视图,因为它是