大家好,我们在项目的一个页面中有以下结构:
<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也没有用。
我会感激任何想法。
答案 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"
链接保留当前的网页浏览量