Ошибка сеанса: для объекта не задан экземпляр - PullRequest
2 голосов
/ 02 мая 2011

На моей веб-странице я не могу получить переменную сеанса для поста обратно на удаленном сервере.

Проблема в

, если страница не IsPostback, тогда я могуполучите переменную сеанса.

Но если постбэк страницы, то появляется ошибка.

Эта же ошибка возникает, когда я использую загрузку asynchfile.Я использую asynchfileupload, чтобы загрузить изображение и сохранить его в переменной сеанса.и позже при нажатии кнопки я сохраняю данные в каталог.

эта проблема возникает, когда я загружаю любые файлы на сервер. Я использую элемент управления asynchfileupload для загрузки изображения., но это происходит не часто.

вот мой код

protected void AsynImageLoader_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
    if (AsynImageLoader.PostedFile != null)
    {
        string extension = System.IO.Path.GetExtension(AsynImageLoader.PostedFile.FileName);

        if (extension == ".jpg" || extension == ".gif" || extension == ".jpeg" || extension == ".png")
        {
            HttpPostedFile file = AsynImageLoader.PostedFile;
            Session["TempImage"] = ReadFile(file);
        }
    }
}

при нажатии кнопки

   var storedImage = Session["TempImage"] as byte[];
   String Strthumbpath = Server.MapPath("content\\thumbnail\\");
   if (storedImage != null)
   {
       System.Drawing.Image image = GetImage(storedImage);
       if (image != null)
       {
       image.Save(Strthumbpath + strFileName);
       }

       }

вставка значений в базу данных.

после некоторого поиска в Google я читал это, когда какие-либо файлыдобавление в любой подкаталог или редактирование webconfig приведет к перезапуску приложения.

, если да, как я могу решить эту проблему ..

заранее спасибо.

Ответы [ 6 ]

0 голосов
/ 02 мая 2011

Событие нажатия кнопки происходит ПОСЛЕ Событие загрузки страницы ... возможно, поэтому оно не установлено. ;-)

0 голосов
/ 02 мая 2011

Первый сеанс проверки.

if (Session["User_id"] == null)
{
//Put code here

}
else
{
     Response.Write(Session["User_id"]);

     // or you can write as below

     Response.Write(Convert.ToString(Session["User_id"]));
}

Никогда не используйте .ToString() Метод, вы должны использовать Convert.ToString, это также нулевое значение хэндла.

0 голосов
/ 02 мая 2011

Проверьте файл web.config на удаленном компьютере и убедитесь, что элемент sessionState настроен правильно.Возможно, на вашем удаленном сервере для атрибута mode установлено значение Off.

Как уже отмечали другие, вы можете более осторожно кодировать проверку на null перед доступом к свойствам сохраненного объектав сессии.

0 голосов
/ 02 мая 2011

Вы должны проверить свою сессию, если она нулевая или пустая, следующим образом:

 if (Session["User_id"] == null || Session["User_id"].ToString() == string.Empty)
 {
    Response.write(Session["User_id"].ToString());
 }
 else
 {
   // your code
 }
0 голосов
/ 02 мая 2011

Пожалуйста, предоставьте код, без которого мы не можем угадать проблему.Тем не менее, вы всегда можете выполнить нулевую проверку переменной сеанса перед ее использованием.

if(Session["User_id"]) != null;
0 голосов
/ 02 мая 2011

Похоже, что ваша переменная сеанса с именем "User_id" удаляется, когда вы отправляете обратно.Вы видите «Объект не установлен как экземпляр объекта», потому что вы пытаетесь выполнить метод «ToString ()» для нулевого объекта, что недопустимо.

Надеюсь, это поможет.

...