在我的应用程序中,我有几个按钮的updatepanel。其中一个按钮是“导出”按钮 - 点击后,用户可以将报告下载到他的本地计算机。
按钮以这种方式创建:
btnSave = new Button
{ ID = "btnSave", CausesValidation = false, Text = "Save", CommandName = CommandNames.SaveToCSV };
Controls.Add(btnSave);
ScriptManager.GetCurrent(Page).RegisterPostBackControl(btnSave);
点击后执行此代码:
string csv = GenerateReport();
Page.Response.Clear();
Page.Response.Buffer = true;
Page.Response.ContentType = "text/csv";
Page.Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
Page.Response.Write(csv);
Page.Response.End();
即使在更新面板中,下载仍然可以正常工作。我的问题是,在第一次单击“导出”按钮后,所有按钮停止工作 - 我的页面不向服务器发送任何内容 - 在Fiddler中检查(但客户端javascrpts正常工作)。 有谁知道如何解决这个问题?也许还有另一种从updatepanel下载数据的方法(我无法从更新面板中删除此按钮)。
答案 0 :(得分:1)
我不确定为什么会这样,但是一个快速的解决方法可能是将下载按钮更改为带有target = _blank的简单href,并将csv生成代码移动到专用页面\ http-handler
答案 1 :(得分:0)
UpdatePanel需要异步回发后的有效增量,但您要发送CSV文件。我的猜测是一个异常被静默抛出,但由于部分回发你没有看到黄色屏幕。 Fiddler是否显示看起来像黄色屏幕的响应(查看Fiddler中的响应内容)?
(user4537的解决方法可行,因为它避免了我上面描述的问题。)