在我的ASP.NET MVC3项目中,我有一个运行一段时间的动作。 如果可以将部分响应发送回视图,那就太好了。 目标是向用户显示一些进度信息。 有人知道如何做到这一点吗?
我尝试了一些直接输出到响应,但它没有被部分地发送到客户端,而是在一个块上:
[HttpPost]
public string DoTimeConsumingThings(int someId)
{
for (int i = 0; i < 10; i++)
{
this.Response.Write(i.ToString());
this.Response.Flush();
Thread.Sleep(500); // Simulate time-consuming action
}
return "Done";
}
在视图中:
@Ajax.ActionLink("TestLink", "Create", new AjaxOptions()
{ HttpMethod = "POST", UpdateTargetId="ProgressTarget" })<br />
<div id="ProgressTarget"></div>
任何人都可以帮助我制作渐进式动作效果吗? 谢谢!
答案 0 :(得分:4)
以下是如何实现这一点:首先定义一个将保持长时间运行状态的类 - &gt;你将需要id,progress,result等属性......然后你将需要两个控制器动作:一个将启动任务,另一个将返回进度。 Start操作将生成一个新线程来执行长时间运行的操作并立即返回。一旦任务启动,您可以将此操作的状态存储到某个公共存储中,例如给定任务ID的应用程序。
第二个控制器操作将传递任务ID,它将查询应用程序以获取给定任务的进度。在此期间,后台线程将执行,并且每次进行时它将更新应用程序中任务的进度。
最后一部分是客户端:您可以使用AJAX定期轮询进度控制器操作并更新进度。