Je construis un grand projet MVC multi-zone. (MVC 2 Bêta).IList stocké dans la session est mis à jour lorsque la copie locale de l'IList est modifiée
J'ai une classe wrapper de session, dans son propre projet, MaSession, qui ressemble à ceci:
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
Dans un projet de zone d'enfants, je construis et enregistrer une liste de session à travers mon emballage:
Dim favoritesList = (From m In db.getFavorites(UserId) Select m).ToList
MySession.UserList = favoritesList
Cela fonctionne très bien. Je récupérer plus tard la liste de la session dans une variable locale, userList:
Dim userList As IList(Of getFavoritesResult)
userList = MySession.UserList
Je puis ajouter un nouvel élément à la liste des utilisateurs locaux (et demandera à l'utilisateur si elles veulent enregistrer):
userList.Add(New getFavoritesResult With {.Id = addApp.AppId, .DisplayText = addApp.DisplayText, ...})
Voici où le problème se produit. Immédiatement après la méthode .Add ci-dessus, le userList local a ajouté le nouvel élément, MAIS la userList stockée dans la session contient également le nouvel élément qui a été ajouté à la liste locale.
Je ne veux pas que la liste soit mise à jour en session à moins que l'utilisateur ne souhaite enregistrer la nouvelle liste, et je l'enregistre explicitement.
Pourquoi cela se produit-il et comment puis-je ajouter uniquement l'élément à la liste locale, pas à celle en cours de session?
Merci, cela me rend fou!
Blessez avoir à copier physiquement la liste des éléments de la liste de session à une nouvelle liste. Tout fonctionne bien maintenant. A donné le crédit pour la réponse à James parce qu'il était le premier à signaler le problème de base que j'avais. Merci James et Oded! –