请等待对话&在asp.net中下载文件

时间:2008-10-08 15:06:32

标签: asp.net

在我的ASP.Net应用程序中,我要求当用户点击UI元素时,我们为他们生成可以下载的PDF。目前,这是通过向ashx页面执行表单发布来实现的。该页面基本上检查表单,然后执行正确的服务器端页面,该页面导致HTML或该页面HTML的PDF文档。

在客户端上我提前知道我们是要获取PDF还是HTML,当它是HTML时我打开一个新窗口并将表单发布到该窗口并且一切正常。当它是PDF时,我不会更改表单的目标,它仍保留在当前页面上。

这样做,用户会看到一个保存对话框,当前页面不会更改或丢失。

我遇到的问题是生成PDF需要1-15秒。我想要做的是弹出一个请等待对话框。显示弹出窗口很容易,我不知道如何关闭弹出窗口?弹出窗口将是当前页面中的div。

4 个答案:

答案 0 :(得分:3)

弹出窗口可以有一个客户端计时器,用于轮询服务器以完成任务。长时间运行的服务器任务应更新数据库表或服务器缓存对象中的进度,轮询服务可以访问该进程。

来自MSDN杂志的几篇旧文章。您应该能够使用与asp.net Ajax等新库相同的概念。

Reporting Task Progress With ASP.NET 2.0

Simplify Task Progress with ASP.NET "Atlas"

答案 1 :(得分:0)

在客户端只有一些javascript,让它显示一些动画GIF 1-15秒(您的选择)并在指定时间后关闭。

答案 2 :(得分:0)

古尔扎尔的建议很明显。我有一个简单的启用了ajax的wcf服务来检查会话变量。我的ashx页面在开始处理时将变量设置为false,然后在完成时将其设置为true。

我认为如果客户端在我们将会话项设置为false之前进行检查,则可能存在竞争条件;但是,如果我们修改服务以在客户端获得完成响应后将会话项设置为false,那么有很多方法。

技巧仍然在弄清楚客户应该是什么样的间隔。如果我们将其设置为低,则用户可以保存文件,然后查看仍在处理的消息。我在半秒到一秒钟之间辩论自己。任何不到半秒钟的东西都是不合时宜的。

答案 3 :(得分:-1)

你说:

  

当它是一个PDF我不改变   表格的目标,它仍然存在   当前页面。

如果是这种情况,则打开PDF时原始页面将消失。在那种情况下,我将有一个加载动画gif并使用Javascript打开它覆盖页面的其余部分的div标签。您不需要关闭它,因此不需要计时器或轮询。当页面消失时它就会消失。