文件下载到浏览器后如何修改页面?

时间:2009-12-18 21:28:06

标签: c# javascript ajax iframe download

我有一个简单的C#ASP.NET应用程序,可生成Excel文件并使用Response.WriteFile()函数将其发送到浏览器。

我想在点击后禁用提交按钮并在屏幕上显示一条消息等待几分钟,因为某些文件可能需要一段时间才能生成。这很好用,但在文件下载完成后,我无法弄清楚如何重新激活按钮,甚至刷新页面。该页面即使在完成后仍处于禁用状态,“请稍候......”状态。

我认为之后使用额外的javascript命令进行同步AJAX调用会起作用,但是虽然该文件确实生成了,但它从未发送到浏览器。我也尝试过使用iframe控件,但找不到任何方法可以确切知道新文件何时加载到其中。

提前感谢任何可以提供帮助的人!

更新:我在http://code.msdn.microsoft.com/AjaxFileDownload找到了一个可能的解决方案,它非常适合下载已经存在的文件,但当我调用生成文件的页面并使用Response.End()完成时,“完成下载”事件永远不会发生。

3 个答案:

答案 0 :(得分:4)

我这样做的方法是让页面生成一个令牌,并将所述令牌连同生成excel文件的请求一起发送到服务器。

当服务器获取令牌时,它会将其丢弃到数据库中的表中,一旦文件完成后,它将删除令牌。

现在,虽然所有这一切都发生了,但是如果数据库中存在令牌,那么在页面上有一个例程(查看JS Timers)会询问服务器(异步调用)。当服务器最终告诉页面“否”时,您知道可以重新启用该页面并隐藏“请稍候......”消息。

答案 1 :(得分:1)

更新:我在http://code.msdn.microsoft.com/AjaxFileDownload找到了一个可能的解决方案,它非常适合下载已经存在的文件,但是当我调用生成该文件的页面并使用Response.End()完成时,“完成下载“事件永远不会发生。

它不支持流下载。您需要创建一个临时文件并将临时文件推送到浏览器,希望这有助于处理生成的文件。只有在浏览器端提供cookie值时才会触发结束下载事件。

谢谢,

拉​​吉

答案 2 :(得分:0)

我可能会将生成并返回文件的代码转换为Web服务并使用jquery或asp.net ajax库进行调用...使用jquery它看起来像:

//open your dialog box here

然后

$.ajax({
   type: "POST",
   url: "yourwebservice.asmx",
   data: "yourdata",
   success: function(){
     //close your dialog box
   }
 });