用例很简单。登录用户的信息显示在 _Layout.cshtml 中。每次都需要刷新该信息。
我找到了两种方法来做到这一点
- 拥有
BaseController
and 在其OnActionExecuting
方法集中ViewBag.UserInfo = ...;
,稍后在 _Layout.cshtml 中使用 - 在
_Layout.cshtml
做@{Html.RenderAction("GlobalUserInfo", "UserInfo");}
问题是,如果从异步方法返回 UserInfo,这两种方法会因死锁或异常而惨遭失败public async Task<UserInfo>GetUserInfo(){...}
。
所以问题是这样的:当使用 async/await 检索数据时,如何在每个操作上设置 ViewBag 属性。