可以在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做我想做的事情?
答案 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)
您不应在视图中执行此操作。进行异步操作,但是当您开始渲染视图时,所有数据都应该准备就绪。