2013-05-12 64 views
0

为什么我会在回发时收到Session [“Time”]变量的空引用异常,即使我已经在get请求中初始化了它。会话变量的空引用异常

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 2013-05-12 03:57:25

+1

它是你的完整代码吗? – Arshad 2013-05-12 04:02:15

+0

检查以下任一条件:http://support.microsoft.com/kb/306996 – 2013-05-12 04:02:15

回答

0

它不应该为空,我只是测试你的代码,它返回DateTime.Now.ToString()。

也许在你的global.asax或应用程序的某个地方清除或不存储会话变量。

+0

在web.config文件下将SessionState模式设置为InProc解决了问题。 – rtz87 2013-05-12 18:33:38

+0

好东西先生... – clamchoda 2013-05-12 19:08:04

-1

它很可能是空的,因为您只在页面加载时设置它,但由于任何原因在PostBack上设置,会话可以为空。可以过期,或池回收和重置,等等。

页面加载,从帖子后面可以有很长的时间距离。有人加载一个页面,去喝咖啡,然后回来,然后按回车......会话在哪里?

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()); 
    } 

或检查会话不为空!