我正在构建一个大型的多区域MVC项目。 (MVC 2 Beta)。当IList的本地副本发生更改时,会话中存储的IList会更新
我有一个会议包装类,在自己的项目,MySession的,看起来像这样:
Public Class MySession
Private Shared _userlist As String = "UserList"
Public Shared Property UserList() As IList
Get
If HttpContext.Current.Session(_userlist) Is Nothing Then
Return Nothing
Else
Return CType(HttpContext.Current.Session(_userlist), IList)
End If
End Get
Set(ByVal value As IList)
HttpContext.Current.Session(_userlist) = value
End Set
End Property
End Class
在儿童领域的项目,我建立并保存清单会议通过我的包装:
Dim favoritesList = (From m In db.getFavorites(UserId) Select m).ToList
MySession.UserList = favoritesList
这工作正常。我后来检索会话列表到一个局部变量,用户名单:
Dim userList As IList(Of getFavoritesResult)
userList = MySession.UserList
我然后添加一个新的项目到本地用户列表(并会询问用户是否要保存它):
userList.Add(New getFavoritesResult With {.Id = addApp.AppId, .DisplayText = addApp.DisplayText, ...})
这是问题发生的地方。紧接在上面的.Add方法之后,本地userList添加了新项目, 但是存储在会话ALSO中的userList包含添加到本地列表的新项目。
我不想在会话中更新列表,除非用户想要保存新列表,并且我明确地保存它。
为什么会出现这种情况,以及如何只将项目添加到本地列表中,而不是当前在会话中的项目?
谢谢,这让我疯狂!
彼时不必实际列表项从会话列表复制到一个新的列表。现在一切正常。因为他首先指出了我所遇到的基本问题,因此给了詹姆斯一个回答。感谢James和Oded! – 2009-12-29 21:46:34