0

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

4

2 回答 2

0

经过我们的讨论,我建议您: - 在您的 UpdatePanel 上将 ChildrenAsTriggers 属性设置为 False。- 不要将按钮定义为 UpdatePanel(也不同步或异步)的触发器 - 使用手动机制在单击按钮时显示 UpdateProgress。像这样我如何使用 jQuery 创建“请稍候,正在加载...”动画?

于 2014-05-07T14:44:03.557 回答
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

于 2014-05-07T14:20:54.643 回答