Вызвать действие AsyncController из другого действия контроллера? - PullRequest
0 голосов
/ 17 апреля 2010

Я бы хотел сделать следующее:

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-пинг от клиента, чтобы узнать, когда результаты доступны, а затем отобразить их.

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

Большое спасибо. Луис

1 Ответ

0 голосов
/ 17 апреля 2010

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

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...