2010-05-13 94 views
4

我在ASP.NET/C#中有一个简单的网页。目前为了完全呈现数据,我需要调用在后台线程上运行的代码块,并可能需要几分钟才能完成。我已经明白了这一点(使用页面声明中的异步属性)来执行,并在完成后用html返回。我希望它能让我立即返回某种类型的“加载页面”,然后在后台工作完成后更新该页面。现在,当后台工作正在处理时,我在页面上什么都没有得到。任何想法,最好的方式或聪明的方式来做到这一点将不胜感激!'正在加载'异步调用网页

感谢,

西格

回答

0

有来实现你的描述使用Ajax什么,但很多方面,如果你想保持它非常简单,你可以简单地Flush()之前,你的一些加载屏幕响应启动长时间运行的任务:

<div> 
    Loading.. 
    <% Response.Flush(); %> 
    <% System.Threading.Thread.Sleep(5000); %> 
    Done! 
</div> 
+0

尝试,一个和喜欢这个主意,因为它似乎很好的和简单的。然而,虽然它最初似乎起作用,但最终失败了,因为它无法保存会话。 – Sieg 2010-05-14 15:59:06

0

你想要什么叫做HTTP Server PushHTTP流媒体长轮询。取决于如何完成。

有很多在网络上的例子,文章还解释了深入的问题。我首先研究这些。

您也可以看看这个HTTP流...

Cross-browser implementation of "HTTP Streaming" (push) AJAX pattern

有到有一个伟大的介绍文章的链接SO问题。

或者这一个与长轮询

How do I implement basic "Long Polling"?

https://stackoverflow.com/questions/tagged/long-polling

希望这有助于的一个例子。

1

我同意上述发布的评论。

然而,我会和有但使用ashx(处理程序)作为一个单独的页面实现“处理器”,因为这些真的很简单,从JavaScript调用和轮询,你只需编写进程请求事件馈送东西进入响应流。

我很想在我的网站上向您展示一个示例,但我的主机决定在我们的网站上运行一周,而他们在服务器上更新.net(您可以想象我对此并不特别满意)。

虽然本质上我来说,我有一个依赖于数据从一个页面: 英国广播公司 谷歌 亚马逊 的YouTube 一些其他的随机位置。

该页面返回给用户,并在页面上各个控件然后进行Ajax调用回服务器及其零部件。

反馈数据将被加载到的标签的默认内容是一个简单的动画gif图像,看起来非常像flash或silverlight加载循环。

数据返回后,gif被服务器馈送的内容替换。

这意味着客户端看到“正在加载”并且服务器正在忙于处理客户端需要的所有内容(看起来似乎是同步的)。

这是一个干净的用户体验,代码非常简单。

当我看着如何使用silverlight进行文件上传时,我绊倒了这个想法。

基本概念:

  1. Ajax调用 “ashx的”。 (可能是10行javascript)
  2. 服务器进程请求。 (取决于请求的复杂性,使用查询字符串传递的变量)
  3. 响应在其他完整页面上填充1个元素。 (AJAX cllback做到这一点)

希望这有助于:)