2011-05-18 93 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