MVC期货异步操作

时间:2009-12-22 11:30:39

标签: c# .net asp.net-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");
        }
}

3 个答案:

答案 0 :(得分:0)

这是一个Web应用程序,您无法从服务器到客户端执行此操作。 你必须用ajax实现一些东西。如果你想要一个代码示例让我知道,我会给你做这个的基础。

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

答案 1 :(得分:0)

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

您只需要在页面上隐藏div,其中包含“搜索”文字。

  1. 将搜索标记为[POST]操作并将表单发布到此操作
  2. 使用javascript在发布页面时显示“搜索”div。
  3. $( “#搜索”)显示();
    $( “表”)提交();

    当流程结束时,转到结果视图。

    就是这样。


    如果您仍想调用异步操作,请参阅:http://msdn.microsoft.com/en-us/library/ee728598(VS.100).aspx#performing_multiple_operations_in_parallel

答案 2 :(得分:0)

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

在您的方案中,您已经从已完成的页面发出部分请求,并且实际上并不需要异步控制器。除非您通过测试发现您的请求正在排队,否则我会避免这种复杂性。