2008-10-20 30 views
5

页面执行许多任务并需要很长时间才能处理。我们希望在每项任务完成时给予用户反馈。请等待ASP.NET MVC中的页面

在ASP.NET web表单,我们使用Response.Flush()

什么方式你会在ASP.NET MVC这样的做法?

回答

1

您可以在客户端进行设置。在每一步中,您都使用当前步骤设置一些会话变量。然后,您在控制器中执行另一个操作,称为“GetProgress”并为其分配一个视图和URI。

在操作中,您将检查此会话并返回当前任务的进度。在客户端,创建一个计时器(即setTimeOut),并且每隔特定时间调用稍后控制器操作的URI - 大约1秒钟左右。这就对了。

1

我个人而言,我会考虑两个optoins:

  • 重定向等待页面(S),然后火行动
  • 就做Ajax风格的
5

你仍然可以使用的Response.Write()和Response.Flush()不管是什么身份,你要发下来线。从您的控制器,而这样做在控制器的操作方法,你的冗长的操作

this.PartialView("Progress").ExecuteResult(this.ControllerContext); 
this.Response.Flush(); 

:或者,如果你有你的进步在啄用户控制,你可以做这样的事情。

这是由你来选择这个或客户端方法在这里的评论中提到的,只是想指出,服务器端仍然是可能的。

+0

我有一个局部视图与文本“请稍候...”,并使用这种方法。但是,在加载所有内容后,“请稍等...”文本仍然保留在页面上。从Action方法返回最终的View时将其删除的简单方法是什么? – 2009-09-29 07:53:49

2

有两种基本方式:

  1. 投票返回状态的服务器页面,那么一旦操作完成,重定向到一个结果页面。 MVC与这种方式无关,您需要使用服务器变量来存储对象/状态 - 这是一种与标准Asp.NET应用程序更相关的方式,正如您(大概)使用会话变量等一样。无论如何。

  2. 从客户端到服务器上的web服务的AJAX调用。 Asp.NET MVC将会在jQuery框架中运行,因此将其用于响应的客户端调用和事件处理。这将更多的MVC的精神,不会/不应该使用会话状态等。