public class SessionViewState : System.Web.UI.Page, IRequiresSessionState
    {
        protected override void OnLoad(EventArgs e)
        {
            if (this.Page.Session["User"] == null || this.Page.Session["User"].ToString() == "")
            {
                HtmlContainerControl div = (HtmlContainerControl)this.Page.FindControl("Global");
                div.InnerHtml = "<div class=\"G_Login\">登录异常,页面已锁定,请重新登录。</div>";
                 return;
            }
            base.OnLoad(e);
        }
        protected override PageStatePersister PageStatePersister
        {
            get
            {
                return new SessionPageStatePersister(Page);
            }
        }
    }上面一段代码,当登录超时了,刷新页面或者点击页面按钮就会出现
System.NullReferenceException: 未将对象引用设置到对象的实例错误。
请教如何修改,才能保证超时后点击按钮或者刷新页面不出现错误

解决方案 »

  1.   

    if (this.Page.Session["User"] == null || this.Page.Session["User"].ToString() == "")
    寫成
    if (this.Page.Session["User"] == null)
    {}
    else if(this.Page.Session["User"].ToString() == "")
    {}
    else
    {}
     不要把this.Page.Session["User"] == null和this.Page.Session["User"].ToString() == ""放在同一個if里邊,為null的時候后邊個條件就會出現問題
      

  2.   

    未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: [NullReferenceException: 未将对象引用设置到对象的实例。]
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +77
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565补充一下错误代码
      

  3.   

    用JS+AJAX实现就可以了啊。
    既简单又实在!
    AJAX定时访问网站(比如1分钟),如果cookie已经失效,就返回提示已经超时,
    再用JS接收到信息后把正常的div隐藏,把登陆超时的DIV显示出来就OK了啊
      

  4.   


    protected override void OnLoad(EventArgs e)
    {
        if (this.Page.Session["User"] != null && this.Page.Session["User"].ToString() != "")
        {
           base.OnLoad(e);  
        }
        else
        {
            HtmlContainerControl div = (HtmlContainerControl)this.Page.FindControl("Global");
            div.InnerHtml = "<div class=\"G_Login\">登录异常,页面已锁定,请重新登录。</div>";
            return;
        }
    }
      

  5.   


    public class SessionViewState : System.Web.UI.Page, IRequiresSessionState
        {
            protected override void OnLoad(EventArgs e)
            {
                if(this.Page.Session["User"] == null)
                {
                 return;
                }
                if (this.Page.Session["User"].ToString() == "")
                {
                    HtmlContainerControl div = (HtmlContainerControl)this.Page.FindControl("Global");
                    div.InnerHtml = "<div class=\"G_Login\">登录异常,页面已锁定,请重新登录。</div>";
                     return;
                }
                base.OnLoad(e);
            }
            protected override PageStatePersister PageStatePersister
            {
                get
                {
                    return new SessionPageStatePersister(Page);
                }
            }
        }
      

  6.   


    protected override void OnLoad(EventArgs e)
    {
        if (object.Equals(this.Page.Session["User"], null))
        {
            return;
        }
        else if (string.IsNullOrEmpty(this.Page.Session["User"].ToString()))
        {
            HtmlContainerControl div = (HtmlContainerControl)this.Page.FindControl("Global");
            div.InnerHtml = "<div class=\"G_Login\">登录异常,页面已锁定,请重新登录。</div>";
            return;
        }
        base.OnLoad(e);
    }
      

  7.   

    Session["User"] = "aaaa";
            if (Equals(this.Page.Session["User"], null))
            {
                return;
            }
            else if (Session["User"] != null || Session["User"] !="")
            {
                HtmlContainerControl div = (HtmlContainerControl)this.Page.FindControl("Global");
                div.InnerHtml = "<div class=\"G_Login\">登录异常,页面已锁定,请重新登录。</div>";
                return;
            }我测试的时候  用的 当它不等于空的时候 div.InnerHtml = "<div class=\"G_Login\">登录异常,页面已锁定,请重新登录。</div>";
     你改下就行