我有一个带有以下触发器的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栏?
答案 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?