在执行异步操作时,我找不到显示请等待页面的方法;
我想要实现的是一个搜索页面,当搜索操作由异步线程完成时,它会显示“请稍候”动画。
我正在粘贴下面实现的简单测试代码。即使调试器通过该行,也不会显示初始的“搜索”视图。我只在操作完成后才看到最终的“结果”视图;
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 :(得分:0)
这是一个Web应用程序,您无法从服务器到客户端执行此操作。 你必须用ajax实现一些东西。如果你想要一个代码示例让我知道,我会给你做这个的基础。
1)底部的“搜索”必须调用显示“请等待”消息的js函数 2)相同的js函数必须调用执行搜索的服务器方法(使用ajax)。在这里我建议使用JQuery,它有一个名为ajax的方法,使用起来非常简单 3)在server方法中进行搜索,并以html或xml或json格式返回结果 4)在js回调方法中,隐藏“请稍候”消息并显示搜索结果。
答案 1 :(得分:0)
实际上,您不需要异步调用,因为您希望等到进程结束。如果您不想等待结果,请使用异步方法。
您只需要在页面上隐藏div,其中包含“搜索”文字。
$( “#搜索”)显示();
$( “表”)提交();
当流程结束时,转到结果视图。
就是这样。
如果您仍想调用异步操作,请参阅:http://msdn.microsoft.com/en-us/library/ee728598(VS.100).aspx#performing_multiple_operations_in_parallel
答案 2 :(得分:0)
异步方法在服务器上运行,而不是在客户端上运行。例如,如果要调用多个Web服务来获取页面数据,则可以使用异步控制器。您可以将请求排队到所有这些请求,它们将并行运行,完成后,asp.net将把它们全部组合在一起以完成页面的组装。
在您的方案中,您已经从已完成的页面发出部分请求,并且实际上并不需要异步控制器。除非您通过测试发现您的请求正在排队,否则我会避免这种复杂性。