在asp.net cshtml视图中嵌入完全成熟的视图+异步控制器

时间:2017-04-20 12:08:27

标签: c# asp.net asp.net-mvc razor

我有一个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}}。不过对同步解决方案不满意,并且仍然致力于可行的解决方案

1 个答案:

答案 0 :(得分:1)

正如您已经发现的那样,ASP.NET MVC 5不支持异步操作.ASP.NET Core MVC 6中引入了对异步操作的支持。

您可以使用AyncPump中的this article执行操作中的异步代码,但操作方法仍必须是同步的。