在cshtml页面内异步加载

and*_*emw 4 c# asp.net asp.net-mvc asynchronous razor

它可以在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>
Run Code Online (Sandbox Code Playgroud)

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

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

Bel*_*gix 5

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

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

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

然后在你的控制器中你将有这样的任务:

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);
}
Run Code Online (Sandbox Code Playgroud)