无法按照我想要的方式获取Session变量

时间:2011-01-14 18:42:20

标签: asp.net vb.net

Partial Class Preferences_MyPreferences
    Inherits System.Web.UI.Page

    Dim userID As String = Session("UserID")

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

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

如果我把Dim用户ID放在内部说出Page_Load事件,那么它可以正常工作。为什么必须在活动中?我想把它调暗一次,并在整个页面中使用它。

3 个答案:

答案 0 :(得分:3)

考虑将代码的调用包装在代码后面的属性中吗?

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

答案 1 :(得分:1)

如果你在那里声明它,那么变量将被初始化,并且会话变量可以准备好使用,但是在页面生命周期中为了允许这样做太早。首选方法是@p.campbell建议并将其包装在Property或类似方法中。但是,要回答这个问题,会生成异常,因为您尝试在会话可用之前使用会话。

答案 2 :(得分:1)

您需要阅读ASP.NET Page LifecyclesSession对象在页面生命周期中的某个点之前不可用;如果您想抓住UserID一次,则需要在会话可用后进行。

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