3

我有 ac# .net Web 应用程序。我创建了会话变量,但是当我离开创建它们的页面后尝试读取它们时,我不能。

创建于第 1 页

Session["UserName"] = "WhatEver";

然后我做

Response.Redirect("~/whatever.aspx"); 

并尝试在新页面的Page_Load方法中读取读取会话变量

string userName = Session["UserName"].ToString();

我收到Object reference not set to an instance of an object.

为什么我会收到此错误,我该怎么做才能解决此问题?

4

3 回答 3

5

这可能会有所帮助:

Response.Redirect("~/whatever.aspx",false);

这篇文章

这不会中止线程并因此保存会话令牌。实际上,此重载由 RedirectFromLoginPage 在内部使用。

于 2012-10-27T17:11:42.670 回答
0

可能在您的文件中sessionState已关闭config

<sessionState mode="Off/> 

更改为InProc[取决于]

<sessionState mode="InProc" timeout ="60" />
于 2012-10-27T17:16:02.380 回答
0

我遇到了完全相同的问题,我设法克服了这个问题,但坦率地说,我不理解 100% 的解决方案,无论如何,我所做的是从“添加新”为我的项目创建一个“Global.asax”文件项目”菜单。只需将以下代码复制粘贴到您的全局文件中。这个文件里面的代码如下:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;

using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace ENTER_YOUR_NAMESPACE
{
    public class Global : System.Web.HttpApplication
    {
        void Application_Start(object sender, EventArgs e)
        {

        }

        void Application_End(object sender, EventArgs e)
        {
            /* Code that runs on application shutdown */
            Session_End(sender, e);
        }

        void Application_Error(object sender, EventArgs e)
        {

        }

        void Session_Start(object sender, EventArgs e)
        {

        }//end void Session_Start

        void Session_End(object sender, EventArgs e)
        {

        }//end void Session_End

    }//end class Global
}//end namespace
于 2013-03-21T15:12:53.070 回答