C# cshtml页面内的异步加载
可以在剃须刀内使用任务(系统线程)吗 我想做的是:我有一个表,我想异步填充 看看代码:C# cshtml页面内的异步加载,c#,asp.net,asp.net-mvc,razor,asynchronous,C#,Asp.net,Asp.net Mvc,Razor,Asynchronous,可以在剃须刀内使用任务(系统线程)吗 我想做的是:我有一个表,我想异步填充 看看代码: @{ Func<dynamic, object> preenche = @<text> <tr><td>oi1</td><td>oi2</td></tr> </text>; } ... <tbody> @Task.Fa
@{
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>
@{
Func预紧=
@
oi1oi2
;
}
...
@Task.Factory.StartNew(()=>
{
foreach(模型中的Apontamento ap.apontamentos)
{
预紧(ap);
}
})
输出如下:System.Threading.Tasks.Task
可能吗?或者我可以使用Ajax来实现我的目标?您不应该在视图中这样做。执行异步操作,但当您开始渲染视图时,所有数据都应准备就绪。如果您希望页面立即渲染并显示,然后在以后发生某些事情(例如操作需要5秒钟才能完成),则可以通过执行类似操作,在数据可用时更新页面(有关的更多信息) 在您的Razor视图中可以添加一些JavaScript:
<script type="text/javascript">
$.getJSON('LongRunningAsyncTask', function (result)
{
// Populate table or other actions with: result.Data
// ...
});
</script>
这不是一个答案,我也能想到UI场景,在页面加载后加载更多数据将是理想的,并将创建一个snappier接口。不清楚OP是否希望使用异步服务器处理或AJAX调用,因此我完全有可能回答另一个问题。但是我不知道您的其余评论如何与我要指出的是,如果您在服务器上执行异步处理,则在控制器中而不是在视图中执行。更重要的是,web场景中的异步操作旨在减少服务器负载和提高可伸缩性,而不是创建snappier接口。
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);
}