我正在尝试从视图中访问会话数据。
使用案例:我将状态消息存储在将显示在页面顶部的会话中。目前,我使用Object.assign()
函数实现了这一功能,该函数设置了一些DisplayMessages()
属性,并在每个控制器操作的开头调用它。
目标:我想只设置一次状态消息,而不需要控制器中的其他代码来显示下一页加载的消息。
所以我试图直接从视图中访问存储在会话中的消息。
到目前为止,我已尝试过以下内容:
ViewData[....]
到next()
的更改
next.invoke()
并且HttpContext
是真的,但会话中没有数据。答案 0 :(得分:20)
以下内容应在视图中有效:Context.Session.TryGetValue
如果您使用SessionExtensions
,则Context.Session.GetString
将起作用。
答案 1 :(得分:1)
注入IHttpContextAccessor
确实有效,但从ASP.NET Core 1.0.0 RC2开始,IHttpContextAcessor
默认情况下未注册,因为它对每个请求都有很大的性能开销。有关详细信息,请参阅this GitHub announcement。
Tratcher发布:
IHttpContextAccessor可用于访问当前线程的HttpContext。但是,维护此状态具有非常重要的性能成本,因此已从默认服务集中删除。
依赖它的开发人员可以根据需要添加它:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
但是在你的用例中,我建议使用ViewComponent
,这是一个可重用的View with logic,不依赖于控制器。
可以找到文档here。
在你的视图中,你只需用
嵌入它@await Component.InvokeAsync("PriorityList", new { maxPriority = 2, isDone = false })
或
@Component.Invoke("PriorityList", new { maxPriority = 2, isDone = false })
用于同步调用。