为什么我在这里获得了一个空的引用异常,因为回发后的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 :(得分:0)
它不应该为null,我只测试了你的代码并返回DateTime.Now.ToString()。
也许在你的global.asax或应用程序的某个地方你正在清除或不存储会话变量。
答案 1 :(得分:-1)
很可能为null,因为您只在页面加载时设置它,但由于任何原因在PostBack上设置它,会话可以为null。可以过期,或者池回收并重置它等等
页面加载,从帖子后面可以有很长的时间距离。有人加载页面,去煮咖啡,然后回来按回车......会话在哪里?
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());
}
或者检查会话是否为空!