2009-12-22 128 views
0

我无法找到一种显示请等待页面的方式,同时进行异步操作;MVC期货异步操作

我想实现的是一个搜索页面,当搜索操作正在由异步线程完成时,显示“请稍候”动画。

我正在粘贴下面实现的简单测试代码。即使调试程序经过该行,也不会显示最初的“搜索”视图。手术完成后,我只能看到最终的'结果'观点;

public class HomeController : AsyncController 
{  
     public ActionResult Search() 
     { 
      // Add an asynchronous operation 
      AsyncManager.OutstandingOperations.Increment(); 
      ThreadPool.QueueUserWorkItem(o => 
      { 
       Thread.Sleep(5000); 
       AsyncManager.OutstandingOperations.Decrement(); 
      }, null); 

      return View("Searching"); 
     } 

     public ActionResult SearchCompleted() { 

      return View("Results"); 
     } 
} 

回答

0

其实你不需要异步调用,因为你想等到进程结束。如果您不想等待结果,请使用异步方法。

您只需要在页面上隐藏一个带有“正在搜索”文本的div。

  1. 马克搜索为[POST]行动和发布表单到这个动作
  2. 使用JavaScript来显示“搜索” div时页面公布。

$(“#searching”)。show();
$(“form”)。submit();

当过程结束时转到结果视图。

就是这样。


如果你仍然要调用一个异步操作请参见:http://msdn.microsoft.com/en-us/library/ee728598(VS.100).aspx#performing_multiple_operations_in_parallel

0

这是一个Web应用程序,你不能这样做,从服务器到客户端。 你必须用ajax实现一些东西。如果你想让代码示例让我知道,我会给你做基础。

1)底部“搜索”必须调用一个显示“请稍候”消息的js函数。
2)相同的js函数必须调用执行搜索的服务器方法(使用ajax)。这里我推荐使用JQuery,它有一个叫做ajax的方法,使用起来非常简单。
3)在服务器方法中进行搜索并以html或xml或json格式返回结果。
4)在js回调方法中,隐藏“Please wait”消息并显示搜索结果。

0

异步方法在服务器上运行,而不是客户端。例如,如果您想调用多个Web服务来获取页面的数据,则可以使用异步控制器。您可以将请求排列到所有这些请求,它们将并行运行,并且在完成后,asp.net将把它们全部结合起来以完成您的页面组装。

在你的场景中,你已经完成了一个完整页面的部分请求,并不需要一个异步控制器。除非您通过测试发现您的请求正在排队,否则我会避免这种增加的复杂性。