Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 如何在ASP.NET Core MVC 1.0中从视图访问会话_Session_Asp.net Core_Asp.net Core Mvc_Asp.net Core 1.0 - Fatal编程技术网

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
      会话。IsAvailable
      为true,但会话中没有数据

    • 以下内容应在视图中起作用:
      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 })