检查会话项是否存在自身失败,对象引用未设置错误

dpp*_*dpp 6 .net vb.net asp.net session

我遇到有关会话项目的问题.在我使用它们之前,我想检查它们是否存在,但使用此代码会给我错误:

If (Session("SomeSessionItem") Is Nothing) Then
...
End If
Run Code Online (Sandbox Code Playgroud)

这是错误:

你调用的对象是空的.

我想Session("SomeSessionItem")尝试获取会话项的价值.如果该项不存在则抛出异常.但在使用会话项之前如何检查会话项是否存在?

  • 我有一个页面Home.aspx.
  • Home.aspx.vb,我实例化一个WebUserControl SomeControl.ascx.请注意,在Home.aspx.vb事件处理程序中,Page_Load我可以使用条件来检查会话而不会出现异常.
  • SomeControl.ascx.vb我试图访问会话时,这里是异常发生的地方.

aba*_*hev 10

那对你有用吗?

If (Session IsNot Nothing)
    Dim item as Object = Session("SomeSessionItem")
    If (item IsNot Nothing)
    ...
    End If
End If
Run Code Online (Sandbox Code Playgroud)

此外,您可能需要检查HttpContext.Current.Session而不是简单地检查Session是否看到以下错误:

会话在此上下文中不存在


Abe*_*bel 5

如果您尝试在创建会话对象本身之前使用会话,您会收到此行为。请注意,Session 对象并非在请求过程中始终可用。您可以检查 Session 本身是否为 Nothing。

它保证在事件触发后创建,Session_Start可以在 global.asax 中检查。

如果您的代码在页面的代码隐藏内运行,则在某些情况下会话状态尚不可用。但是,在 Page_Load 中它可用的,请检查那里。

最后:当.EnableSessionstate="false"为页面或应用程序范围设置 时,您无法访问会话对象。


编辑:

也许你的意思不是If (Session("SomeSessionItem") Is Nothing) Then下面的?

If (Session("SomeSessionItem") IsNot Nothing) Then
    '... do someting, i.e.:'
    Dim sessionItem As String = CType(Session("SomeSessionItem"), String)
Run Code Online (Sandbox Code Playgroud)