Session 如何在ASP.NET Core MVC 1.0中从视图访问会话
我试图从视图内部访问会话数据 用例:我将状态消息存储在会话中,该会话将显示在页面顶部。目前,我通过使用一个Session 如何在ASP.NET Core MVC 1.0中从视图访问会话,session,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,Session,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,我试图从视图内部访问会话数据 用例:我将状态消息存储在会话中,该会话将显示在页面顶部。目前,我通过使用一个DisplayMessages()函数来实现这一点,该函数设置一些ViewData[..]属性,并在每个控制器操作开始时调用它 目标:我只想设置一次状态消息,而不需要控制器中的额外代码在下一页加载时显示消息 因此,我试图直接从视图访问存储在会话中的消息 到目前为止,我尝试了以下方法: IHttpContextAccessor的依赖注入(似乎不再适用于ASP.NET核心MVC1.0.0) ,
DisplayMessages()
函数来实现这一点,该函数设置一些ViewData[..]
属性,并在每个控制器操作开始时调用它
目标:我只想设置一次状态消息,而不需要控制器中的额外代码在下一页加载时显示消息
因此,我试图直接从视图访问存储在会话中的消息
到目前为止,我尝试了以下方法:
- IHttpContextAccessor的依赖注入(似乎不再适用于ASP.NET核心MVC1.0.0)
- ,包括注释中建议的从
到next()
的更改next.invoke()
- 这不起作用。我可以访问
和HttpContext
为true,但会话中没有数据会话。IsAvailable
- 这不起作用。我可以访问
- 以下内容应在视图中起作用:
Context.Session.TryGetValue
如果您使用的是
SessionExtensions
,则Context.Session.GetString
将起作用。注入IHttpContextAccessor
确实起作用,但从ASP.NET Core 1.0.0 RC2开始,默认情况下不会注册IHttpContextAcessor
,因为它对每个请求都有很大的性能开销。有关详细信息,请参阅更多信息
特拉彻张贴:
IHttpContextAccessor可用于访问当前线程的HttpContext。但是,保持此状态会带来不菲的性能代价,因此已将其从默认服务集中删除
依赖它的开发人员可以根据需要重新添加它:
services.AddSingleton();
但在您的用例中,我建议使用ViewComponent
,它是一个可重用的视图,具有逻辑,不依赖于控制器
可以找到文档
在您的视图中,您只需将其嵌入
@await Component.InvokeAsync("PriorityList", new { maxPriority = 2, isDone = false })
或
用于同步调用。通过“上下文”而不是“HttpContext”访问它有效。@FSMaxB如果您在视图中使用Microsoft.AspNetCore.Http;添加
,您可以使用Context.Session.GetString(“”@ademcaglin是的,我已经加载了扩展。谢谢。GetString()方法工作得很好,但对我来说…它在检索到的值周围添加引号。它到底为什么要这样做?这完全没有必要。如果我想在字符串周围添加引号,我会自己做。感谢您解释为什么依赖项注入不再在开箱即用的情况下工作。
@Component.Invoke("PriorityList", new { maxPriority = 2, isDone = false })