2011-05-18 64 views
1

我想在ASP.NET中使用會話狀態在兩個頁面之間傳遞數據。需要傳遞的數據來自GridView的單元格。因此,在SelectedIndexChanged事件我存儲的數據那樣:會話不記得設置值

protected void GridViewEmployees_SelectedIndexChanged(object sender, EventArgs e) 
{ 
     Session["Name"] = 
      this.GridViewEmployees.Rows[GridViewEmployees.SelectedIndex].DataItem; 
} 

然後,我想在另一個頁面中使用會話的內容。代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
     string name = (string)(Session["Name"]); 
     string[] names = name.Split(' '); 
     this.EntityDataSourceNorthwind.Where = 
      "it.[FirstName] = \'" + names[0] + 
      "\' AND it.[lastName] = \'" + names[1] + "\'"; 
} 

但我得到一個空引用異常。另外,我在Page_Load事件中設置了會話初始化,並在那裏存儲了會話,一切正常。我的意思是:

protected void Page_Load(object sender, EventArgs e) 
{ 
     if (Session["Name"] == null) 
     { 
      Session["Name"] = "Andrew Fuller"; 
     } 
} 

這是在發送信息的頁面中。

如果您需要更多來源或信息,請將其寫下。它將盡快提供。

在此先感謝!

+0

GridViewEmployees_SelectedIndexChanged方法是否被正確調用? – skaz 2011-05-18 17:49:25

+0

把'if(!Page.IsPostBack){if(Session ...}'放入你的'Page_Load'中,看看是否有幫助。 – 2011-05-18 17:50:00

+0

@skaz我試圖通過幾種方式獲取數據,但它不是通過任何方式發生的... @ rlb.usa沒有幫助,但是這是必要的,謝謝 – Tsvetan 2011-05-18 17:52:48

回答

2

這實際上不是您的Session的問題。行的DataItem僅在RowDataBound事件期間可用。在GridViewEmployees_SelectedIndexChanged方法中設置一個斷點,然後檢查直接窗口中的DataItem的值。它將是空的。

1

兩個最有可能的罪魁禍首是 - 會話狀態被禁用(EnableSessionState="false"),或者Cookie被禁用,並且您沒有使用cookieless sessions