Pour mon application, j'ai une page qui redirige vers une autre page (dans la même application) via Server.Transfer
. Je dois faire cela parce que la page d'origine a un objet que j'ai besoin d'accéder en utilisant la propriété Page.PreviousPage
.Server.Transfer perdant des variables locales
Une fois que ma page "destination" a été entièrement chargée, un clone profond local que j'ai fait de l'objet de la page source est soudainement libéré de la mémoire une fois que j'effectue un postback? Est-ce par conception - quelque chose à voir avec le Server.Transfer?
Un exemple ...
Page1.aspx:
Public Structure myCustomObject
Implements ICloneable
Dim someField as String = "default value" ' Default value
Public Function Clone() As Object Implements System.ICloneable.Clone
Dim temp as new myCustomObject
temp.someField = Me.someField
Return temp
End Function
End Structure
Dim obj As myCustomObject
Public ReadOnly Property objProp as myCustomObject
Get
Return obj
End Get
End Property
objProp.someField = "changed value from source page"
Server.Transfer("page2.aspx", True)
Page2.aspx:
(onLoad)
Dim newObj As myCustomObject
newObj = Page.PreviousPage.objProp.Clone()
Debug.Write(newObj.someField) ' Output: "changed value from source page"
A ce moment, tout fonctionne comme il devrait. Les trucs ont été clonés correctement et tout va bien.
(Let's say this is on a button click event)
Debug.Write(newObj.someField) ' Output: "default value"<- This is NOT "changed value from source page" for some reason when it was working literally a few lines ago!
C'est par ici que j'ai le problème. Je suppose que Server.Transfer arrête toute association avec la page source après le chargement de la nouvelle page.
Existe-t-il un meilleur moyen de passer des objets inter-pages?
Si vous mettez un bouton et un côté serveur cliquez sur cette page pouvez-vous accéder à votre objet à partir de l'événement click? peux-tu montrer du code? –
Ce que j'ai dit pourrait être un peu flou, mais je ne connais pas d'autre moyen de le dire. – danyim
Cela me sent mauvais. Vous pouvez sûrement stocker l'objet d'origine dans un autre conteneur et le retirer dans le chargement de la page re-dirigé? – Graham