C# 会话变量被不相关的方法破坏

C# 会话变量被不相关的方法破坏,c#,asp.net,session,C#,Asp.net,Session,我有一个完全让我难以置信的问题,因为它毫无意义。好的,正如我过去所理解和使用的,通过会话将变量从一个页面传递到另一个页面,您只需说 会话[“variableName”]=值 然后在接收页面中使用它,它类似于: 字符串容器=会话[“variableName”].ToString() 对吧??花花公子在我的代码中(至少在这个特定的应用程序中),我发现如果在我的页面中有一个方法,我就无法设置任何会话变量 protected void Page_Load(object sender, Event

我有一个完全让我难以置信的问题,因为它毫无意义。好的,正如我过去所理解和使用的,通过会话将变量从一个页面传递到另一个页面,您只需说

会话[“variableName”]=值

然后在接收页面中使用它,它类似于:

字符串容器=会话[“variableName”].ToString()

对吧??花花公子在我的代码中(至少在这个特定的应用程序中),我发现如果在我的页面中有一个方法,我就无法设置任何会话变量

    protected void Page_Load(object sender, EventArgs e)
    {
        Session.Add("values", "It Worked");
        LoadAvailableItems();        
    }
这将导致应用程序不将变量传递到下一页。但是,如果我删除LoadAvailableItems()方法,它将正常工作。现在你会问我“好吧,让我们看看这个方法里面有什么”。它只是为控件运行虚拟数据的测试连接:

//test connection DELETE ME
        string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
            + Server.MapPath("App_Code/temp/cokeDb.mdb") + ";Persist Security Info=False;";
        OleDbConnection conn = new OleDbConnection(connString);
        string sql = "select docNum, docName from lut_docs order by docNum";
        OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);
        DataSet ds = new DataSet();

        conn.Open();
        da.Fill(ds);
        conn.Close();

        cblstAvailableItems.DataSource = ds;
        cblstAvailableItems.DataTextField = "docName";
        cblstAvailableItems.DataValueField = "docNum";
        cblstAvailableItems.DataBind();
        //end test connection
从我能够通过注释块和运行应用程序将其缩小到的范围来看,我认为它与此块有关:

conn.Open();
da.Fill(ds);
conn.Close();

现在我一点也不明白为什么这会引起问题。如果有人能向我解释这一点,我可能会避免把头伸到墙上。

是的,“对象引用未设置为对象的实例。”指的是接收页面中不存在的会话变量。您说从access数据库接收数据时出现异常。您可以用Try/Catch来包围它,并设置一个断点来检查引发的异常类型。除此之外,你是说
LoadAvailableItems
重定向到另一个页面,但是代码在哪里?旁注:您不能
响应。从Try/Catch中重定向
,因为这会导致
线程异常
。重定向位于按钮的postbackurl中。页面加载、创建会话变量、加载列表。单击按钮,它会显示一个页面,我只是为了测试会话变量而创建的。您是否尝试过其他方法-会话[“variableName”]=value?(…刚注意到这篇文章是在什么时候创建的…奇怪,为什么这篇文章在一小时前被编辑过?)