Проверить, существует ли элемент сеанса, происходит сбой, если ссылка на объект не установлена - PullRequest
6 голосов
/ 12 августа 2011

У меня проблема с сессиями. Прежде чем использовать их, я хочу проверить, существуют ли они, но использование этих кодов дает мне ошибку:

If (Session("SomeSessionItem") Is Nothing) Then
...
End If

Это ошибка:

Ссылка на объект не установлена ​​для экземпляра объекта.

Я думаю, Session("SomeSessionItem") пытается получить значение элемента сеанса. Если элемент не существует, он генерирует исключение. Но как мне проверить, существует ли элемент сеанса перед их использованием?

  • У меня есть страница Home.aspx.
  • В Home.aspx.vb я создаю экземпляр WebUserControl SomeControl.ascx. Обратите внимание, что в Home.aspx.vb обработчике событий Page_Load я могу использовать условие для проверки сеанса без получения исключения.
  • Внутри SomeControl.ascx.vb Я пытаюсь получить доступ к сеансу, здесь происходит исключение.

Ответы [ 5 ]

10 голосов
/ 12 августа 2011

Это работает для вас?

If (Session IsNot Nothing)
    Dim item as Object = Session("SomeSessionItem")
    If (item IsNot Nothing)
    ...
    End If
End If

Кроме того, вам может потребоваться проверить HttpContext.Current.Session вместо простого Session, если вы видите следующую ошибку:

Сессия не существует в этом контексте

3 голосов
/ 12 августа 2011

Если вы попытаетесь использовать сеансы до создания самого объекта сеанса, вы получите это поведение.Обратите внимание, что объект 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)
1 голос
/ 27 июня 2012

Используйте это

VB.NET

IF HttpContext.Current IS NOTHING Then
   ------Your Code
Else
  ----Your Code
End IF

C #

IF Session("XYZ") == NULL
{
   ---- Your Code
}
Else
{
  ---- Your Code
}
1 голос
/ 12 августа 2011

Вы уверены, что ошибка исходит от вашей линии If?Что вы делаете внутри If?

Я спрашиваю, потому что вы говорите:

Прежде чем использовать их, я хочу проверить, существуют ли они

и затем проверьте, что они не существуют.

Я полагаю, что код внутри вашего блока If читает значение из Session и пытается использовать его сразу после проверкичто его не существует:)

1 голос
/ 12 августа 2011

Вам нужно использовать Item на Session

If Session.Item("SomeSessionItem") Is Nothing Then
    ' No such value in session state, take appropriate action.
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...