我正在构建一个大型的多区域 MVC 项目。(MVC 2 测试版)。
我有一个会话包装类,在它自己的项目 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
这工作正常。我稍后将会话中的列表检索到局部变量 userList 中:
Dim userList As IList(Of getFavoritesResult)
userList = MySession.UserList
然后我向 LOCAL userList 添加一个新项目(并询问用户是否要保存它):
userList.Add(New getFavoritesResult With {.Id = addApp.AppId, .DisplayText = addApp.DisplayText, ...})
这是问题发生的地方。在上述 .Add 方法之后,本地 userList 立即添加了新项目,但存储在 Session 中的 userList 还包含添加到本地列表中的新项目。
我不希望在会话中更新列表,除非用户想要保存新列表,并且我明确保存它。
为什么会发生这种情况,我如何只将项目添加到本地列表,而不是当前会话中的项目?
谢谢,这让我发疯了!