【问题标题】:Null reference exception for session variable会话变量的空引用异常
【发布时间】:2013-05-06 09:59:09
【问题描述】:

为什么即使我在 get 请求中初始化了 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:对象引用未设置为对象的实例。

【问题讨论】:

  • 这是你的完整代码吗?
  • 检查以下任一条件:support.microsoft.com/kb/306996
  • 此代码不应导致错误,除非存在配置问题。您可以发布会话管理的堆栈跟踪和 web.config 设置吗?

标签: asp.net


【解决方案1】:

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

可能在您的 global.asax 或您正在清除或不存储会话变量的应用程序的某个位置。

【讨论】:

  • 在web.config文件下设置Sessionstate模式为InProc解决了这个问题。
【解决方案2】:

很可能为空,因为您仅在页面加载时设置它,但出于任何原因在 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());
    }

或者检查会话是否为空!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多