asp.net - _Layout 中强类型局部 View 的异步操作

标签 asp.net .net asp.net-mvc-4 partial-views async-await

所以,这是概要...

我的 MVC 4 应用程序有一个主布局页面,其中包含一些动态信息,需要强类型化到特定域实体才能获取该信息。为了使我的文件更清晰,我已将键入的字段提取到部分 View 中。

为了获取我需要的实体并将其映射到部分的 View 模型,我有一个 LayoutController,其操作返回 Task<PartialViewResult> 。此操作使用服务层来创建 async调用 Web API 项目 await实体。它将该实体按摩到 View 模型中,然后返回 PartialView("_LayoutPartial", viewModel).

在 _Layout 页面中,通过以下方式调用部分:

@{Html.RenderAction("LayoutInfo", "Layout", new { /*entity primary key*/ });}

我已经单步执行了代码,它确实返回了正确的实体,但是在返回部分 View 任务后,我得到了每个人最喜欢的服务器错误页面,并出现以下错误:

HttpServerUtility.Execute blocked while waiting for an asynchronous operation to complete.

我已经进行了一些谷歌搜索和搜索,但不知道这实际上意味着什么。我的想法正确吗?

最佳答案

该错误消息意味着您正在尝试从同步方法中调用(并等待!)异步方法。在您的具体情况下,同步方法是 HtmlHelper.RenderAction,异步方法是您的任务返回操作方法。发生错误的原因是,编写异步任务返回方法的目的大概是为了避免阻塞线程,但 RenderAction 在任务完成之前无法返回,因此 RenderAction 在等待操作完成时最终会阻塞。

一种选择是使 RenderAction 调用的方法同步而不是异步,请记住这将继续阻塞原始线程。另一种选择是从原始操作方法中异步填充布局数据,然后通过 ViewData 将其传递到布局页面。

关于asp.net - _Layout 中强类型局部 View 的异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057203/

相关文章:

asp.net - Windows Azure AspNetSqlMembershipProvider

asp.net-mvc-4 - Kendo MVC treeview 将选定的节点传递给网格

asp.net-mvc - Web Api 性能优于 MVC

c# - 列出用户具有读取权限的文件 (ASP.NET)

c# - 面对没有主键约束的表时,Dapper 或 ADO.NET

c# - 如何使用 C#.Net 删除更多 DataTable 列?

c# - CollectionBase 类是否仍然受支持?

c# - (276/304)*304 的小数舍入关闭

c# - 更改事件项目中 TFS 解决方案的结构?

c# - IIS 中的 Word 自动化