从另一个Controller Action中调用AsyncController Action?

时间:2010-04-16 21:31:14

标签: c# asp.net-mvc .net-3.5 asynchronous

我想完成以下任务:

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“ping”以了解结果何时可用,然后显示它们。

但我不知道如何以异步方式调用异步Action!

非常感谢你。 路易斯

1 个答案:

答案 0 :(得分:0)

您可以在新线程中调用该操作:

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

视图可以使用AJAX调用来检查结果是否可用的操作:

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

ping:

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);