页面执行许多任务并需要很长时间才能处理。我们希望在每项任务完成后向用户提供反馈。
在ASP.NET网络表单中,我们使用了Response.Flush()
您在ASP.NET MVC中以何种方式处理此问题?
答案 0 :(得分:5)
您仍然可以将Response.Write()和Response.Flush()用于您想要发送的任何状态。或者,如果您在用户控件中有进度,则可以执行以下操作:
this.PartialView("Progress").ExecuteResult(this.ControllerContext);
this.Response.Flush();
在控制器的操作方法中执行冗长操作时,从控制器。
这取决于你选择这个或客户端方法,如这里的评论所述,只是想指出服务器端仍然可能。
答案 1 :(得分:2)
我建议使用AJAX来显示进度。请参阅相关链接:
答案 2 :(得分:2)
有两种基本方法:
轮询返回状态的服务器页面,然后在操作完成后,重定向到结果页面。 MVC与此无关,您需要使用服务器变量来存储对象/状态 - 这是一种与标准Asp.NET应用程序更相关的方式,因为您(可能)使用会话变量等。反正。
AJAX从客户端调用服务器上的Web服务。 Asp.NET MVC将推出jQuery框架,因此将其用于响应的客户端调用和事件处理。这更符合MVC的精神,它不会/不应该使用会话状态等。
答案 3 :(得分:1)
您可以在客户端进行此操作。在每个步骤中,您使用当前步骤设置一些会话变量。然后,您在控制器中执行另一个操作,称为“GetProgress”,并为其分配视图和URI。
在操作中,您将检查此会话并返回任务的当前进度。在客户端,创建一个计时器(即setTimeOut),并在每个特定的时间内调用后一个控制器操作的URI - 大约1秒钟。就是这样。
答案 4 :(得分:1)
我个人认为我会考虑两种选择: