【问题标题】:Accessing a Session object from Razor _Layout.cshml从 Razor _Layout.cshtml 访问 Session 对象
【发布时间】:2010-12-07 20:22:22
【问题描述】:

使用 Razor 构建一个 MVC 3 应用程序,我在 Session 范围内保留了一些信息,这些信息将在 _Layout 文件中使用。

我不知道实现这一点的最佳方法是什么。其中一些信息用于确定在标头中呈现的内容。

我有一个 CurrentUser 对象存储在 Session 范围内

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    您可以只访问布局文件中的 HttpContext

    @HttpContext.Current.Session["Whatever"].ToString()
    

    或者,如果你想访问用户对象,你可以在页面中创建一个对象并分配它

    @{ CurrentUser user = (CurrentUser)HttpContext.Current.Session["CurrentUser"]; }
    

    然后在您的代码中...

    @user.Name
    

    【讨论】:

    • 嘿,谢谢.. 这行得通,但现在我觉得很脏,因为我不得不添加一个@using 指令.. 没有办法在你的 _Layout 中使用 ViewModel 吗?
    • 如果它能让你感觉更干净,你可以将你的命名空间添加到 Views\Web.config 文件中 Razor 使用的默认列表中。
    • 您也可以将它封装在视图模型的通用基类中。我相信您可以从 _Layout 页面使用该基类。
    • 抱歉,题外话了,但是有没有:Session.isNew?
    • 有一个Session_Started() 是为用户创建会话的时间
    【解决方案2】:

    更简单的方法是直接从视图中使用Session 属性(根本不需要HttpContext.Current. 前缀):

    @(CurrentUser)Session["CurrentUser"]
    

    【讨论】:

      猜你喜欢
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 2018-04-03
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多