我有一个简单的C#ASP.NET应用程序,可生成Excel文件并使用Response.WriteFile()函数将其发送到浏览器。
我想在点击后禁用提交按钮并在屏幕上显示一条消息等待几分钟,因为某些文件可能需要一段时间才能生成。这很好用,但在文件下载完成后,我无法弄清楚如何重新激活按钮,甚至刷新页面。该页面即使在完成后仍处于禁用状态,“请稍候......”状态。
我认为之后使用额外的javascript命令进行同步AJAX调用会起作用,但是虽然该文件确实生成了,但它从未发送到浏览器。我也尝试过使用iframe控件,但找不到任何方法可以确切知道新文件何时加载到其中。
提前感谢任何可以提供帮助的人!
更新:我在http://code.msdn.microsoft.com/AjaxFileDownload找到了一个可能的解决方案,它非常适合下载已经存在的文件,但当我调用生成文件的页面并使用Response.End()完成时,“完成下载”事件永远不会发生。
答案 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
}
});