Asp.net在PostBackTrigger上显示UpdateProgress

时间:2014-05-07 14:00:46

标签: c# asp.net updatepanel updateprogress

我有一个带有以下触发器的UpdatePanel:

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="ddlNames" EventName="SelectedIndexChanged" />
    <asp:PostBackTrigger ControlID="btnPullReport"/> 
</Triggers>

当触发SelectedIndexChanged事件时,我可以从UpdateProgress看到我的加载gif,但是当我单击btnPullReport按钮时,我没有。

它必须是PostBackTrigger类型,否则我会收到错误:

0x800a139e - JavaScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.

btnPullReport创建一个Excel文件并提示用户保存它。

btnPullReport_Click中的最后几行是:

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;  filename=Report.xlsx");
package.SaveAs(Response.OutputStream);
Response.End();

错误发生在Response.End();,并指出:{Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.}

如何在单击按钮后显示UpdateProgress栏?

2 个答案:

答案 0 :(得分:0)

首先,UpdateProgress仅显示异步回发,您的按钮是“PostBackTrigger”而不是“AsyncPostBackTrigger”。您还必须知道,如果快速收到响应,UpdateProgress将不会显示,请参阅DisplayAfter属性http://msdn.microsoft.com/en-us/library/vstudio/system.web.ui.updateprogress.displayafter(v=vs.100).aspx

其次,在部分更新时,服务器端代码不得使用Page.Response对象,因为这会改变响应格式。有关详细信息,请参阅此http://forums.asp.net/p/1083296/1607033.aspx

答案 1 :(得分:0)

在我们讨论之后,我建议你: - 在UpdatePanel上将ChildrenAsTriggers属性设置为False。 - 不要将按钮定义为UpdatePanel的触发器(也不是同步或异步) - 单击按钮时,使用manuel机制显示UpdateProgress。像这个How can I create a "Please Wait, Loading..." animation using jQuery?