在ASP.NET中使用Response.write生成文件时,如何使用updateprogress?

4
我正在使用C#文件中的Response.write创建一个Excel文件,这需要1-2分钟的时间。我想利用UpdateProgress来指示文件生成正在进行中。但是当我使用UpdateProgress时,文件没有被生成。
请告诉我是否有什么地方出错了。

我已经检查了同样的事情,在 Response.write() 时出现错误。我也很担心为什么会出现这个错误。 - Muhammad Akhtar
2个回答

3
我认为这是由于响应对象和/或基本的HTTP请求结构被误解所导致的。
你的请求:GET /buildXLS.aspx
服务器1的响应:/*文件下载的头部信息*/ /*文件数据*/
服务器2的响应:/*HTML页面的头部信息*/
正在更新...
/*文件数据*/
如果你试图像服务器1那样操作,你不能在响应中发送除文件本身(和适当的标头)之外的任何数据。如果你试图像服务器2那样操作,你下载的页面将被视为HTML,并且你永远看不到文件数据,因为已经写入了指示“text/html”传输而不是XLS的标头。事实上,一旦出于任何原因刷新了响应,就无法再向其写入。
我可以看到一个情况下,你的方案可以工作,但只能作为两个交互页面-页面1显示进度消息,然后打开一个新窗口,页面2。页面2开始XLS构建,然后在完成时触发页面1隐藏进度消息。现在你有两个页面来匹配你尝试发送的两组标头,而不是试图在同一个响应中发送HTML更新并启动文件下载。

感谢您详细的解释,我使用了一个自定义定义的进度条。 - RajMohan

0

请参阅UpdateProgress 控件概述

UpdateProgress 控件提供了有关 UpdatePanel 控件中部分页面更新的状态信息。

您是否在 UpdatePanel 中进行部分页面更新?


是的,这是一个部分页面更新。当进程正在进行时,我可以看到更新进度在旋转,但一旦到达 Response.Write(),它就停止了,没有生成任何文件。 - RajMohan
很抱歉,John,没有异常情况。Response.Write()在服务器端代码中。 - RajMohan
我是指在服务器端。在尝试测试的同时,请检查服务器端事件日志中的异常。 - John Saunders
John,我可以在响应对象中看到异常“System.PlatformNotSupportedException”。但是,即使在页面中没有updatepanel,我也可以看到此异常,并且当我从网页中删除updatepanel时,系统能够生成Excel文件。 - RajMohan
我没有看到任何明确的异常抛出。从一个网站上我得知,Response对象不能在由放置在UpdatePanel中的控件引发的任何事件中使用(UpdateProgress也在UpdatePanel中)。我们可以通过在UpdatePanel的Triggers标记中指定控件ID来使其工作,但是UpdateProgress将无法处理由该控件引发的事件。 - RajMohan
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接