Я не могу использовать Session In Page_Load, и я получил ошибку ниже - PullRequest
1 голос
/ 05 апреля 2010

почему я получил эту ошибку:

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

, когда я помещаю этот код в мою page_load.:

protected void Page_Load(object sender, EventArgs e)
{
     BackEndUtils.OverallLoader();

     string Teststr = Session["Co_ID"].ToString();
}

===============================================================================

этот сеанс выполняется, когда пользователь входит на мой веб-сайт и этотсеанс работает в других областях ...

спасибо за ваше внимание

=========================================================================

спасибо за ваши ответы

я удалил BackEndUtils.OverallLoader();, но ошибка все еще существует

я попытался Teststr = Convert.ToString(Session["Co_ID"]); и ошибка исчезла - но я не знаю, почему эта сессия равна нулю

в других областях, где сеанс работает отлично = например, кнопка в этой форме

в чем дело?

моя разметка веб-страницы выглядит так:

<%@ Page Title="" Language="C#" MasterPageFile="~/Admin/AdminBackend.Master" AutoEventWireup="true" CodeBehind="Personel.aspx.cs" Inherits="Darman.Admin.Personel" Theme="DefaultTheme" %>

======================================================================================

я вставил этот код в кнопку, подобную этой:

string Teststr = Convert.ToString(Session["Co_ID"]);

когда я нажимаю эту кнопку, ЭТОТ код на странице Load (POSTBACK) + IN Button_Click работает отлично и показывает мне 23 (мой Co_ID)

Но когда я запускаю свою страницу в браузере (первый раз), этот код на страницезагрузка показывает мне ноль.

почему?

спасибо большое

Ответы [ 5 ]

1 голос
/ 27 декабря 2011

Возможно, вы должны увидеть ошибку. Ошибка говорит, что .ToString() не работает с объектами и, более того, вам не нужно писать .ToString() здесь. Он будет работать без него, как показано ниже

protected void Page_Load(object sender, EventArgs e)
{
    BackEndUtils.OverallLoader();

    string Teststr = Session["Co_ID"].ToString();
}
1 голос
/ 05 апреля 2010

Вы можете попробовать:

Teststr = Convert.ToString(Session["Co_ID"]);

, который будет обрабатывать null с; также проверьте: у вас отключено состояние сеанса для страницы?

<%@ Page language="c#" ... EnableSessionState="false" %>

(хотя я мог бы ожидать более очевидную ошибку в этом случае)

1 голос
/ 05 апреля 2010

Вероятно, параметр сеанса "Co_ID" не существует. Проверьте раньше:

if (Session["Co_ID"] != null) 
 {
   Teststr = Session["Co_ID"].ToString();
 }
0 голосов
/ 05 апреля 2010

Ошибка может исходить от вашего BackEndUtils.OverallLoader.

Что касается переменной сеанса - если кто-то заходит на эту страницу без входа в систему, он не будет установлен. Возможно, истекло время сеанса, и "Co_ID" больше не установлен.

0 голосов
/ 05 апреля 2010

Исключение может быть вызвано одним из следующих двух условий:

  1. Что-то в теле BackEndUtils.OverallLoader() вызывает исключение.
  2. По какой-либо причине Session["Co_ID"] имеет значение null, и при вызове ToString() при нулевом сбое.

Используйте трассировку стека, предоставленную исключением, чтобы определить, какой из них правильный. Если это # ​​1, мы должны увидеть источник этого метода, чтобы выполнить дальнейшую диагностику. Если # 2, вам может потребоваться внести некоторые коррективы вручную в эту строку в вашем коде (возможно, вы захотите это сделать в любом случае):

object id = Session["Co_ID"];
if (id == null)
{
    id = Session["Co_ID"] = LoadCoIdFromSomewhere();
}

string Teststr = id.ToString();
...