【发布时间】:2013-07-31 18:10:59
【问题描述】:
我一定对会话有误解。我正在尝试存储一些信息,所以让我提供详细信息。
这是我的“容器”类,它包含一个业务对象列表。此容器存储在会话中。
public class MySessionContainer {
private IList<SomeBusinessObjectType> _BusinessObjectList = new List<SomeBusinessObjectType>();
public IList<SomeBusinessObjectType> BusinessObjectList {
get { return _BusinessObjectList; }
set { _BusinessObjectList = value; }
}
}
我有一组形成向导/多步骤流程的页面,它们都需要访问处于会话中的容器中的业务对象列表。
第一页将业务对象添加到会话中的列表中,因此使用这种代码来实现:
string key = GetKeyForCurrentUser();
MySessionContainer container = (MySessionContainer) Session[key];
SomeBusinessObjectType businessObject = /* Get object from view. */;
container.BusinessObjectList.Add(businessObject);
生成的密钥在所有页面中始终相同。
但是,当用户进入第二页时,容器按预期处于会话中,但业务对象列表为空,这不是我所期望的。如果第一个页面添加了一个业务对象,那么它应该在第二个页面和后续页面中......对吗?
关于 ASP.net 中的会话,我有什么不明白的地方吗?为什么容器在会话中而不是列表? ASP.net从会话中写入/读取时,列表是否没有与容器对象序列化?
【问题讨论】:
-
你有没有试过修改后把它塞回Session?
-
@JerKimball 我已经考虑过了,但我认为在单个请求中,会话中的值始终是相同的引用。
-
我必须检查一些东西才能确定(离开 asp.net 有一段时间了),但我的直觉是你在访问时得到了反序列化的副本,而不是原始参考。
-
如果你的会话不是“inproc”,你必须确保你的整个对象图是可序列化的。