我有一个cshtml控制器,大致有以下逻辑:
public class MyController
{
public async Task<ActionResult> Index(string query){
// do something with query and put result in 'myModel'
return View(await myModel.ToListAsync());
}
}
当我直接调用动作时,这非常有效。
现在我想要一个仪表板,它调用这个控制器动作3次,每个都有不同的查询参数,大概是这样的:
@Html.Action("Index", "myControllerName", new { query = "foo" })
@Html.Action("Index", "myControllerName", new { query = "bar" })
@Html.Action("Index", "myControllerName", new { query = "baz" })
代码在第一个@Html
行引发异常但是:
类型&#39; System.Web.HttpException&#39;的例外情况发生在 System.Web.dll但未在用户代码中处理
其他信息:[已翻译:执行时出错]处理程序 &#39; System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper&#39;
基于这个问题Error executing child request for handler in view我构建了第二个返回局部视图的方法,并检查是否有[HttpGet]要删除(没有&#39; t)。两者都不起作用。
编辑 构建一个非异步的部分视图,根据异常后触发继续并搜索错误并找到此问题:{{ 3}}。不过对同步解决方案不满意,并且仍然致力于可行的解决方案
答案 0 :(得分:1)
正如您已经发现的那样,ASP.NET MVC 5不支持异步子操作.ASP.NET Core MVC 6中引入了对异步操作的支持。
您可以使用AyncPump中的this article执行操作中的异步代码,但操作方法仍必须是同步的。