【问题标题】:Can't get Session variable the way I want to无法以我想要的方式获取 Session 变量
【发布时间】:2011-01-14 18:42:19
【问题描述】:
Partial Class Preferences_MyPreferences
    Inherits System.Web.UI.Page

    Dim userID As String = Session("UserID")

这只是 asp.net 中的一个页面。我希望能够获取 Session("UserID") 但每次尝试时,我都会收到此错误:

会话状态只能在 enableSessionState 设置为 true 时使用,无论是在配置文件中还是在 Page 指令中。还请确保 System.Web.SessionStateModule 或自定义会话状态模块包含在应用程序配置的 \\ 部分中。

如果我将 Dim 用户 ID 放入 Page_Load 事件中,那么它可以正常工作。为什么它必须在事件中?我想调暗一次,然后在整个页面中使用它。

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    考虑将您对 Session 的调用包装在代码中的属性中吗?

    Public ReadOnly Property UserID() As String
        Get
            Return Session("UserID")
        End Get
    End Property
    

    【讨论】:

      【解决方案2】:

      如果您在此处声明它,则该变量将被初始化,并且会话变量预计可以使用,但是在页面生命周期中允许这样做还为时过早。首选方法是 @p.campbell 建议的并将其包装在 Property 或类似方法中。不过,要回答这个问题,会生成异常,因为您试图在 session 可用之前使用它。

      【讨论】:

        【解决方案3】:

        您需要阅读ASP.NET Page LifecyclesSession 对象直到页面生命周期中的某个点才可用;如果你想抢一次UserID,你需要在会​​话可用后进行。

        它在您的示例中不起作用的原因是您的 Preferences_MyPreferences 页面的构造函数在请求对象可用于页面之前执行。您应该改为在 Page_InitPage_Load 事件期间加载它。

        【讨论】:

        • 谢谢你的链接,我现在明白了:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多