我有这个非常奇怪的问题,我确信我在这里遗漏了一些明显的东西.我有这两行:
HttpContext.Current.Session[listModelType + "ListModel"] = listModel; listModel.ProductRows = new Collection<ProductRow>(listModel.ProductRows.Where(r => r.ParentRowId == 0).ToList());
执行第二行后,我的会话对象也会更新(根据Visual Studio中的“Watch”)
我在这里错过了什么?
我试过了
int i = 0; HttpContext.Current.Session["i"] = i; i++;
和HttpContext.Current.Session [“i”]保持为0.
解决方法
见
value types and reference types.
int是一个值类型,因此将在赋值时“按原样”存储; listModel是一个引用类型,因此您在会话中存储对象的引用,而不是对象的值.
如果您希望会话中的那个实例不受影响,则必须创建listModel的新实例.