【问题标题】:How do I close a splash message after generating a file?生成文件后如何关闭启动消息?
【发布时间】:2015-09-14 04:06:09
【问题描述】:

我遇到了一个相当棘手的情况,我希望大家能提供帮助。作为我的应用程序的一部分,我正在为我的用户生成一个文件。不幸的是,生成此文件所需的时间可能接近 5 分钟。为了安抚我的用户,我正在显示一条消息,要求他们请稍候。生成文件后,我想将文件返回给他们并清除消息。我正在使用 ASP.NET 计时器来检查文件何时完成生成。

文件生成完成后,我的问题就出现了。此时,我需要做三件事:

  1. 将文件传递给用户。
  2. 关闭消息。
  3. 禁用定时器。

我的问题来自这样一个事实,即一旦我完成将文件写入响应,我的回发没有完成,所以 Viewstate 没有得到更新,所以消息和计时器还在。

有什么想法吗?

【问题讨论】:

  • 嗯。很多反对票,没有 cmets。如果没有任何上下文说明为什么它们不是好的答案,那么投票答案就没有多大意义了。
  • 呃,我没有投反对票。
  • 抱歉 - 没有说您 (Correl) 投了反对票 - 这是对反对票者的一般评论。

标签: c# asp.net


【解决方案1】:

我认为您需要将其分解为几个阶段,而不是在单个页面请求中完成所有处理。如果我正在设计这个,我会做这样的事情..

  1. 用户通过单击您网站上的某个链接来创建文件。这会将一些信息写入数据库表,或者启动生成文件的进程。
  2. 用户会看到一个“请稍候”页面,该页面可以每 N 秒更新一次。
  3. 生成文件后,数据库表将更新为“就绪”状态。
  4. “请稍候”页面刷新,作业已完成,文件现已下载。

假设“请稍候”页面使用基于经过身份验证的用户的某些标识,那么这样做的好处是允许用户收集他们的文件,而不管他们是否感到无聊和/或意外关闭浏览器。

事实上,为什么不查看这些涵盖类似领域的 SO 帖子...

Handling Long Running Reports Long-running code within asp.net process BackgroundWorker thread in ASP.NET

...还有其他的(搜索“ASP.NET long running”)

【讨论】:

  • 这是我过去的做法。最难的一点是让你的长时间运行的进程在页面请求线程之外运行。但是一旦你这样做了,它就是一个好方法。
【解决方案2】:

我做过类似的事情,但没有使用计时器。基本上我启动了一个对话框OnClientClick,然后让服务器端来处理它(OnClick)。我使用以下 javascript 来处理 OnClientClick 中返回的回发:

Dialog.show();    
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
                    function(sender, args) {                            
                        MyDialog.hide();
                    }); 

【讨论】:

    【解决方案3】:

    KISS 方法正在重定向到加载页面(带有加载消息等),该页面又调用慢速加载资源。在资源准备好之前,页面会显示加载消息。唯一的缺点是,如果您的资源确实需要 5 分钟才能生成,则请求将超时。如果是这种情况,@Martin-Peck 已经发布了更好的解决方案。

    【讨论】:

      猜你喜欢
      • 2011-02-11
      • 2011-07-11
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多