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