在cshtml页面内异步加载

时间:2013-04-17 15:22:26

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

可以在Razor里面使用Task(System.Threading)吗?

我要做的是:我有一张桌子,我想要异步填充。

查看代码:

@{
    Func<dynamic, object> preenche =
        @<text>
            <tr><td>oi1</td><td>oi2</td></tr>
        </text>;
}

...
<tbody>
    @Task.Factory.StartNew(() =>
        {
            foreach(Apontamento ap in Model.apontamentos)
            {
                preenche(ap);
            }
        })
</tbody>

输出就是这样:System.Threading.Tasks.Task

有可能吗?或者我可以使用Ajax做我想做的事情?

2 个答案:

答案 0 :(得分:5)

如果您希望页面立即呈现并显示,然后稍后会发生某些事情(比如操作需要5秒钟才能完成),那么您可以通过执行此类操作来获取数据可用时更新的页面(更多有关.getJSON)的信息。

Razor视图上,您可以添加一些JavaScript:

<script type="text/javascript">
    $.getJSON('LongRunningAsyncTask', function (result) 
    {
        // Populate table or other actions with: result.Data
        // ...
    });
</script>

然后在您的控制器中,您将完成以下任务:

public JsonResult LongRunningAsyncTask()
{
    // Show this is async and won't render straight away...
    System.Threading.Thread.Sleep(5000);

    // Build up our view model
    var viewModel = new TestViewModel();

    // Send back as a Json result
    var result = new JsonResult();
    result.Data = viewModel;
    return Json(result, JsonRequestBehavior.AllowGet);
}

答案 1 :(得分:0)

您不应在视图中执行此操作。进行异步操作,但是当您开始渲染视图时,所有数据都应该准备就绪。