【发布时间】:2013-04-15 08:31:39
【问题描述】:
我正在开发一个 aspx 应用程序 (C#),我在其中使用 HttpSessionState 在视图更改之间的代码中保存不同的对象。其中一些对象包含通用列表 (List<T>),但当我使用 SQL 数据库存储状态 (sessionState mode = "SQLServer") 时,这些列表似乎没有保存。对象中的所有其他属性都被保存,但是当我尝试检索列表时,我得到了空列表。
有趣的是,如果我使用sessionState mode = "InProc",一切正常。
我的课程有Serializable 属性。我正在运行 C#/.NET 4.0。
任何想法都将不胜感激!
编辑:
只是用一些代码来澄清(不是逐字逐句!)。
我有想要保存(实例)到我的会话状态的类:
public class MyClass
{
public string Property1 { get; set; }
public string Property2 { get; set; }
public List<MyOtherClass> Property3 { get; set; }
}
public class MyOtherClass
{
public string AnotherProperty1 { get; set; }
public string AnotherProperty2 { get; set; }
}
然后,在我的代码背后 - 一个操作保存以前类的对象:
public void MyMethod()
{
MyClass myClass = new MyClass()
{
Property1 = "One string",
Property2 = "One other string",
Property3 = new List<MyOtherClass>() { new MyOtherClass() { AnotherProperty1 = "One", AnotherProperty2 = "Ohter" } }
};
HttpContext.Current.Session["MyKey"] = myClass;
}
...另一个动作将检索该对象:
public void MyOtherMethod()
{
MyClass myClass = (MyClass)HttpContext.Current.Session["MyKey"];
int c = myClass.Property3.Count; // Will be 0!!
}
所以myClass.Property1 和myClass.Property2 将保存我之前设置的字符串,但myClass.Property3 是一个空列表。
【问题讨论】:
-
您是否已将应用程序配置为使用 sql server 进行会话状态?看到这篇关于如何做的帖子stackoverflow.com/questions/7394357/…
-
是的。此应用程序托管在具有多个站点的 Web 服务器上,并且服务器上的所有其他站点基本上都使用 SQL 进行会话状态。另外 - 请记住,在我的应用程序中,它将所有数据存储在对象中,除了列表(已初始化,但为空)!
-
您能在存储和读取列表对象的位置显示您的代码吗?
-
@PrashantLakhlani - 看看我编辑的问题。
标签: c# asp.net .net session-state