2013-05-12 2 views
0

Почему я получаю исключение нулевой ссылки здесь для переменной Session ["Time"] после обратной передачи, даже когда я инициализировал ее в запросе get.Исключение Null ссылки для переменной сеанса

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace WebApplication4 
{ 
    public partial class WebForm2 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       Session["Time"] = DateTime.Now.ToString(); 
      } 
     } 
     protected void Button1_Click(object sender, EventArgs e) 
     { 
      Response.Write(Session["Time"].ToString()); 
     } 
    } 
} 

Сведения об исключении: System.NullReferenceException: Ссылка на объект не установлена ​​в экземпляр объекта.

+0

Здесь нет ошибок ... – clamchoda

+1

Это ваш полный код? – Arshad

+0

Проверьте любое из следующих условий: http://support.microsoft.com/kb/306996 –

ответ

0

Это не должно быть null, я просто проверил ваш код и возвращает DateTime.Now.ToString().

Возможно, в вашем global.asax или где-то в приложении вы очищаете или не сохраняете переменные сеанса.

+0

настройка режима Sessionstate для InProc в файле web.config решила проблему. – rtz87

+0

Хороший материал сэр ... – clamchoda

-1

очень возможно быть нулевым, потому что вы устанавливаете его только при загрузке страницы, но в PostBack по каким-либо причинам сеанс может быть нулевым. Может быть истек, или пул утилизируется и перезагружается, и т. Д.

Загрузка страницы, с обратной почтой может иметь длительное время. Кто-то загрузит страницу, пойдет кофе и вернется и нажмите enter ... Где сеанс?

if (!IsPostBack) 
{ 
    Session["Time"] = DateTime.Now.ToString(); 
} 
// else If is PostBack the `Session["Time"]` can be null !!! 

Может быть, вам нужно использовать ViewState, а не сеанс

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      ViewState["Time"] = DateTime.Now.ToString(); 
     } 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Response.Write(ViewState["Time"].ToString()); 
    } 

Или проверить, если сессия не равно нулю!

Смежные вопросы