我正在学习MVC 4并遇到这个问题:
我在演示应用中工作的内容: 我的家庭控制器的索引操作呈现一个视图,显示一些带有加载器图标的空块。同时,我正在使用jquery ajax调用将一些数据发布到下面的Summary操作中,并替换主视图块中返回的局部视图并隐藏加载器图标。所有调用都将客户端代码正常工作,async设置为true。
这是我的家庭控制器中的操作。
[HttpPost]
public ActionResult Summary(DefaultViewModel defaultViewModel, string reference)
{
return PartialView("test", GetView(defaultViewModel, reference));
}
上面的GetView
函数调用了一些第三方休息服务,并为部分视图准备了一个视图模型。
问题:
我想要改进的部分是 - 我希望我的Home控制器的Summary操作在渲染一个局部视图之后不要从浏览器中监听那些ajax调用!目前,此操作会向浏览器呈现“x”部分视图,但这需要很长时间。我希望最小化该时间,就像Controller在后台执行GetView
功能一样,并且可以立即用于浏览器的另一个请求。
为此,我确实使用了asyn-await和Task.Factory.StartNew
这样:
[HttpPost]
public async Task<ActionResult> Summary(DefaultViewModel defaultViewModel, string reference)
{
var viewModel;
await Task.Factory.StartNew(() =>
{
viewModel = GetView(defaultViewModel, reference);
});
return PartialView("test", viewModel);
}
但这不适合我。我想知道如何更改我的摘要操作,以便在后台执行所有过程时尽快从浏览器中侦听ajax请求。
答案 0 :(得分:0)
问题是 - 在你等待的任务执行之前,你的return PartialView("test", viewModel);
将不会被执行。