2009-12-22 5 views
0

Я не мог найти способ отображения страницы wait wait при выполнении операции async;Операции с асинхронными фьючерсами 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, чтобы показать «Searching» DIV, когда страница размещена.

$ ("# поиск"). Show();
$ ("form"). Submit();

Когда процесс заканчивается, перейдите к представлению результатов.

Все.


Если вы все еще хотите вызвать ГЭЭ асинхронного действия: http://msdn.microsoft.com/en-us/library/ee728598(VS.100).aspx#performing_multiple_operations_in_parallel

0

Это веб-приложение, которое вы не можете сделать с сервера на клиент. Вы должны реализовать что-то с ajax. Я дам вам основание для этого, если вы хотите, чтобы код приводил меня ко мне.

1) Нижний «Поиск» должен вызывать функцию js, которая показывает сообщение «Пожалуйста, подождите».
2) Одна и та же функция js должна вызывать метод сервера, который выполняет поиск (с помощью ajax). Здесь я рекомендую использовать JQuery, у него есть метод, называемый ajax, который очень прост в использовании.
3) Сделайте поиск в методе сервера и верните результат в формате html или xml или json.
4) В методе обратного вызова js скройте сообщение «Подождите» и покажите результат поиска.

0

методы Async запуск на сервере, а не клиент. Вы должны использовать асинхронный контроллер, если, например, вы хотите вызвать несколько веб-сервисов для получения данных для своей страницы. Вы можете отправлять запросы в очередь всем, они будут выполняться параллельно и по завершении, asp.net объединит их для завершения сборки вашей страницы.

В вашем сценарии вы уже делаете частичный запрос с завершенной страницы и не нуждаетесь в асинхронном контроллере. Если вы не найдете через тестирование, что ваши запросы находятся в очереди, я бы избегал этой дополнительной сложности.

Смежные вопросы