get_会话()的ASP.NET NullReferenceException

get_会话()的ASP.NET NullReferenceException,asp.net,session,nullreferenceexception,Asp.net,Session,Nullreferenceexception,其中第71行是:if(会话[“Error”]!=null) 我做错了什么 编辑(从原作者抄写): @大卫 这里是AdminMaster.master.cs: public class MessageHelper : System.Web.UI.MasterPage { public MessageHelper() { } public string Message { set { Session["Message"] = value;

其中第71行是:if(会话[“Error”]!=null)

我做错了什么

编辑(从原作者抄写):

@大卫

这里是AdminMaster.master.cs:

public class MessageHelper : System.Web.UI.MasterPage
{
    public MessageHelper()
    {

    }

    public string Message
    {
        set { Session["Message"] = value; }
        get
        {
            if (Session["Message"] != null)
            {
                var msg = Session["Message"] as string;
                Session["Message"] = "";
                return msg;
            }
            return "";
        }
    }

    public string ErrorMsg
    {
        set { Session["Error"] = value; }
        get
        {
            if (Session["Error"] != null)
            {
                var err = Session["Error"] as string;
                Session["Error"] = "";
                return err;
            }
            return "";
        }
    }
}


[NullReferenceException: Object reference not set to an instance of an object.]
   System.Web.UI.UserControl.get_Session() +15
   WebApplication1.MessageHelper.get_ErrorMsg() in ..file.master.cs:71
所以它确实继承了System.Web.UI.MasterPage,我的错

我希望可以从站点上的不同页面访问MessageHelper。我的所有页面都使用主文件,这就是我将MessageHelper放在主文件中的原因


这里出了什么问题?

在调试期间,您能否确认
会话
不为空?尝试在此类中引用完全限定为
System.Web.HttpContext.Current.Session
,看看这是否有帮助

编辑:响应您发布的非答案答案

不建议将该助手类与母版页放在同一文件中。将它放在它自己的文件中,该文件以类命名。(关于是否每个类都应该有自己的文件,可能存在争论,但在这个特定的案例中,很明显,这个文件中的两个类非常不相关,不应该放在一起。)

该类可以有自己的名称空间,例如
WebApplication1.Helpers
(尽管我建议以后使用比
WebApplication1
更具描述性的名称空间,但不要尝试在此处更改它,因为它会在项目的其他地方导致错误),其他类文件可以使用WebApplication1.Helpers通过
引用该名称空间以使用该类

在项目(或多个项目,随着复杂性的增加)中将类划分为一个直观的结构将使将来的支持变得更容易


而且,查看整个文件时,helper类肯定不应该从母版页继承。它不需要,这样做会向该类添加不应该存在的内容。

在调试期间,您能否确认
会话
不为空?尝试在此类中引用完全限定为
System.Web.HttpContext.Current.Session
,看看这是否有帮助

编辑:响应您发布的非答案答案

不建议将该助手类与母版页放在同一文件中。将它放在它自己的文件中,该文件以类命名。(关于是否每个类都应该有自己的文件,可能存在争论,但在这个特定的案例中,很明显,这个文件中的两个类非常不相关,不应该放在一起。)

该类可以有自己的名称空间,例如
WebApplication1.Helpers
(尽管我建议以后使用比
WebApplication1
更具描述性的名称空间,但不要尝试在此处更改它,因为它会在项目的其他地方导致错误),其他类文件可以使用WebApplication1.Helpers通过
引用该名称空间以使用该类

在项目(或多个项目,随着复杂性的增加)中将类划分为一个直观的结构将使将来的支持变得更容易


而且,查看整个文件时,helper类肯定不应该从母版页继承。它不需要这样做,这样做会为该类添加不应该存在的内容。

我对您试图通过MessageHelper类实现的内容感到有点困惑

如果它是母版页的通用代码,那么您肯定应该从MessageHelper继承AdminMaster

例如


如果不是,我不明白为什么MessageHelper需要从MasterPage继承?

我对您试图通过MessageHelper类实现的功能感到有点困惑

如果它是母版页的通用代码,那么您肯定应该从MessageHelper继承AdminMaster

例如


如果不是,我不明白为什么MessageHelper需要从母版页继承?

会话本身可能为空。@Marcie,的确如此@纳托,调用/引用
.ErrorMsg
的代码在哪里?为什么?那么我该如何解决这个错误呢?它的受保护的无效页面加载(对象发送者,EventArgs e){……会话本身可能是空的。@Marcie,的确如此。@NATTO,调用/引用
.ErrorMsg
?为什么?我该如何解决这个错误呢?它的受保护的无效页面加载(对象发送者,EventArgs e){….好吧,这似乎解决了问题..是什么原因造成的?我应该从…何处继承?@NATTO:我不确定所有的细节,但是
HttpContext。当前的
是pages为您预先引用的内容。您正在创建一个单独的类,尽管它继承自
MasterPage
(顺便说一句,为什么?将类扩展为不执行其本意的操作是很奇怪的),它似乎不知道
HttpContext.Current
singleton,而只是引用了一个空的
会话
。好吧,我把它放在一个单独的类中,因为我想从每个地方访问它,这意味着该类位于主文件上,可以从不同的页面访问,我错了吗?@NATTO:一个单独的类s是好的,原因是正确的。我从这段代码中看不到该类继承自
MasterPage
的原因。该
MessageHelper
类是否实际用作母版页?如果不是,它不应从母版页继承。它不从母版页继承..它在master.cs文件中,在同一命名空间下,并且定义为:public类MessageHelper:System.Web.UI.MasterPage,所以它继承自System.Web.UI.MasterPage..好吧,这似乎解决了问题..是什么原因造成的?我应该从…哪里继承?!@NATTO:我不确定所有的细节,但是
HttpContext。当前的
是页面预先为您引用的内容。您我们正在创建一个单独的类,虽然它继承自母版页(顺便问一下,为什么?它
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.SessionState;

namespace WebApplication1
{
    public partial class AdminMaster : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            MessageHelper msg = new MessageHelper();

            if (msg.ErrorMsg != "")
            {
                // do something
            }
            if (msg.ErrorMsg != "")
            {
                // do something
            }
        }
    }
    public class MessageHelper : System.Web.UI.MasterPage
    {
        public MessageHelper()
        {

        }

        public string Message
        {
            set { System.Web.HttpContext.Current.Session["Message"] = value; }
            get
            {
                if (System.Web.HttpContext.Current.Session["Message"] != null)
                {
                    var msg = System.Web.HttpContext.Current.Session["Message"] as string;
                    System.Web.HttpContext.Current.Session["Message"] = "";
                    return msg;
                }
                return "";
            }
        }

        public string ErrorMsg
        {
            set { System.Web.HttpContext.Current.Session["Error"] = value; }
            get
            {
                if (System.Web.HttpContext.Current.Session["Error"] != null)
                {
                    var err = System.Web.HttpContext.Current.Session["Error"] as string;
                    System.Web.HttpContext.Current.Session["Error"] = "";
                    return err;
                }
                return "";
            }
        }
    }
}
public partial class AdminMaster : MessageHelper