0

为什么即使我在获取请求中对其进行了初始化,回发时我也会在此处为 Session["Time"] 变量获得空引用异常。

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:对象引用未设置为对象的实例。

4

2 回答 2

0

它不应该为空,我刚刚测试了您的代码,它返回 DateTime.Now.ToString()。

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

于 2013-05-12T03:59:43.720 回答
-1

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

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

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

或者检查会话是否不为空!

于 2013-05-12T09:16:34.963 回答