我正在構建一個大型的多區域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