4

可以在 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 来做我想做的事情?

4

2 回答 2

5

如果您希望页面立即呈现并出现,然后稍后发生某些事情(例如操作需要 5 秒才能完成),那么您可以通过执行类似的操作让页面在数据可用时更新(有关.获取JSON)。

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);
}
于 2013-04-17T15:47:41.523 回答
0

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

于 2013-04-17T15:29:49.093 回答