【发布时间】:2015-03-31 23:22:42
【问题描述】:
今天我不得不将我的项目从默认 inProc 升级到 SQLServer 会话状态。当我完成转换时,我的代码中的一种方法停止了正常工作。它是一个调用静态列表变量的方法,首先是计数,然后是值,它在每个页面(母版页的一部分)上调用它。到目前为止,它工作得非常好,输出值并保持不变,但现在,在登录并设置会话状态变量后不久,静态变量将被删除,我得到空指针异常。
由于他们在自己的班级,我设法找到了解决方案,将他们移动到他们被调用的页面,但首先可能是什么导致了这个问题。
总而言之,静态 List 字符串变量在创建后不久就会被删除并清空(与之前完全正常工作相反),这与我将 SQLServer 实现为会话状态有关(与之前使用 inproc 相对)。
谢谢。
编辑:
GetTabs(静态变量所在的位置)是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
public class GetTabs
{
public static List<string> listLbl;
public static List<string> listHead;
public static string log_idd;
public static string accesss;
int i = 0;
DbConn dbc = new DbConn();
public void ReturnTabs(int log_id, int access)
{
dbc.StoredProcedureTOReturnTabsNames(log_id, access, out listLbl, out listHead);
}
public void ReturnTabsMobile(int log_id, int access)
{
dbc.StoredProcedureTOReturnTabsNamesForMobiles(log_id, access, out listLbl, out listHead);
}
}
那是在另一个类中用 GetTabs.listLbl[x] 调用的...... 现在我将变量和方法移至该类,并简单地删除了“GetTabs”。来自我的其他方法。
即使类在某些方面不正确,在我更改会话变量模式之前它工作得非常好。
EDIT2:这两种方法绘制数据的DataBase与我用于Session State的不同。
EDIT3:在我将静态变量移动到调用类之后,它们看起来像这样:
public class Functions : System.Web.UI.Page
{ ...
public void method1(Panel pnn)
{
ReturnTabs(CheckUser.user_id, CheckUser.user_access);
int i = listLbl.Count;
for (int n = 0; n < i; n++)
{
LinkButton l = new LinkButton();
Label lbl = new Label();
l.ID = "lb" + n;
l.CommandArgument = n.ToString();
l.Command += Do_Something;
lbl.Text = listLbl[n];// +" " + GetTabs.log_idd + " " + GetTabs.accesss; //GetTabs.listHead[n];
Panel pnl = new Panel();
以此类推,创建并放置作为以编程方式生成的标题菜单的按钮。
在我的 Master 中使用来自 Master 的面板调用 onLoad。
【问题讨论】:
-
将变量更改为属性,并在设置器中添加断点,条件为 value == null。另外,您的静态变量是否标记为线程静态?
-
相当神秘。静态类成员与 Session 或 Session 状态模式之间没有联系。我们不知道当 Session 切换到 SQL Server 时,您的代码做了什么使静态变量 [s] 变为空。
-
您发布代码会不会太多,您可以发布它最初的内容与您将代码更改为的内容吗..
-
@Igor 我知道,在我的代码中,我什至没有接近将变量归零。 MethodMan 请在上面找到。
-
什么代码调用
ReturnTabs?
标签: c# asp.net sql-server