2010-04-16 3 views
0

Я хотел бы выполнить следующее:Вызов действия AsyncController из другого действия контроллера?

class SearchController : AsyncController 
{ 
    public ActionResult Index(string query) 
    { 
     if(!isCached(query)) 
     { 
      // here I want to asynchronously invoke the Search action 
     } 
     else 
     { 
      ViewData["results"] = Cache.Get("results"); 
     } 

     return View(); 
    } 

    public void SearchAsync() 
    { 
     // some work 

     Cache.Add("results", result); 
    } 
} 

Я планирую сделать с AJAX «пинг» от клиента, чтобы знать, когда результаты будут доступны, а затем отображать их.

Но я не знаю, как вызвать асинхронное действие асинхронным способом!

спасибо. Луис

ответ

0

Вы можете вызвать действие в новом потоке:

if(!isCached(query)) 
{ 
    new Thread(SearchAsync).Start(); 
} 

мнение может использовать вызов AJAX для действия, которое будет проверять, если результаты доступны:

public ActionResult Done(string query) 
{ 
    return Json(new 
    { 
     isDone = !isCached(query), 
     result = Cache.Get(query) 
    }); 
} 

И пинг:

var intId = setInterval(function() { 
    $.getJSON('/search/done', { query: 'some query' }, function(json) { 
     if (json.isDone) { 
      clearInterval(intId); 
      // TODO : exploit json.result 
     } else { 
      // TODO: tell the user to wait :-) 
     } 
    }); 
}, 2000); 
+0

Спасибо! Довольно крутое решение :) – Luis

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