我有一个更新面板并使用PostBackTrigger事件更新进度。但是当我点击按钮时,没有显示更新进度。请找到以下示例代码
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="updatepanelDropDownTaskType" CssClass="Token-setup-popup" DynamicLayout="true">
<ProgressTemplate>
<div id="loading" class="loading">
<asp:Image runat="server" ID="imgBusyIndicator" ImageUrl="~/images/busy-indicator.gif" />
</div>
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="updatepanelDropDownTaskType" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:PostBackTrigger ControlID="btnExport" />
</Triggers>
<ContentTemplate>
<asp:Button ID="btnExport" runat="server" Text="Export To CSV" CssClass="button" CausesValidation="true" onclick="btnExport_Click" ClientIDMode="Static"/></asp:Button>
</ContentTemplate>
</asp:UpdatePanel>
我的代码
HttpResponse Response = System.Web.HttpContext.Current.Response;
Response.ClearHeaders();
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.ContentType = FileType;
Response.Write(content);
HttpContext.Current.ApplicationInstance.CompleteRequest();
答案 0 :(得分:6)
那么你的代码是好的。问题与您在Triggers
中使用的UpdatePanel
有关。
微软说
UpdateProgress
控件呈现<div>
元素 显示或隐藏,具体取决于是否关联UpdatePanel
控件已导致asynchronous
回发。对于初始页面 渲染和synchronous
回发,UpdateProgress
控件未显示。
查看 MSDN
的详细信息因此,您在PostBackTrigger
中使用UpdatePanel
会导致synchronous
回发,并且UpdateProgress
将不会显示。
<Triggers>
<asp:PostBackTrigger ControlID="btnExport" />
// Incorrect
</Triggers>
将其更改为
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnExport" />
// Correct
</Triggers>
这将显示您的UpdateProgress
并将按照您的预期运作。
正如您在评论中提到的那样,您正在Grid
上进行下载。您也可以使用Button
注册ScriptManager
。这将注册您的按钮,并在asynchronous
回发时显示下载按钮。
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Button btnExport = e.item.FindControl("btnExport") as Button;
if (btnExport != null)
{
((ScriptManager)this.Page.Master.FindControl("ID of your Script manager")).RegisterPostBackControl(downloadDocColumn);
// In Above line i assumed Script Manager is placed on Your master page.
}
}
}
希望这会有所帮助......
答案 1 :(得分:1)
我写了一个“Ajaxable Panel”(在博客文章中解释的术语),可能对您的场景有所帮助。
http://leftyftw.wordpress.com/2011/10/01/an-ajaxable-panel/
它面向SharePoint,但在这里完全适用。
答案 2 :(得分:0)
尝试将以下内容添加到system.web
下的web.config文件中<xhtmlConformance mode="Transitional"/>
如果代码完美,它可能会解决您的问题。 如果能解决你的问题,请选择回答。