大規模なマルチエリア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に新しいアイテムが追加されますが、セッションに格納されているuserListには、ローカルリストに追加された新しいアイテムも含まれます。
ユーザーが新しいリストを保存する必要がない限り、セッションでリストを更新したくないので、明示的に保存します。
これが発生するのはなぜですか。また、現在セッション中のアイテムではなく、ローカルリストにのみアイテムを追加するにはどうすればよいですか。
おかげで、これは私を狂わせています!