Je rencontre un problème dans mon application ASP.NET avec l'actualisation de la page Viewstate et F5.Problème avec LoadViewState après la mise à jour de la page F5 - Impossible de charger viewstate
Si, après la navigation d'une page à une autre, je immédiatement frappé F5, je reçois l'erreur suivante:
System.InvalidCastException
"Unable to cast object of type 'System.Web.UI.Triplet'
to type 'System.Web.UI.Pair'."
Cela conduit à l'exception suivante affichée sur la page:
HttpException (0x80004005): Failed to load viewstate. The control tree
into which viewstate is being loaded must match the control tree that
was used to save viewstate during the previous request.
For example, when adding controls dynamically, the controls added during a
post-back must match the type and position of the controls added during
the initial request.]
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +310
System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +136
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +224
System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +136
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +224
System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +136
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +224
System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +136
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +224
System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +136
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +224
System.Web.UI.Page.LoadAllState() +439
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1092
Le point à laquelle il échoue est dans la méthode LoadViewState substituée pour un contrôle d'étiquette personnalisée, lorsqu'il appelle le parent LoadViewState
System.Web.UI.WebControls.Label.LoadViewState(ByVal savedState As Object)
L'objet savedState semble être un contrôle complètement différent (une liste déroulante) qui est un System.Web.UI.Triplet, au lieu de l'objet System.UI.Pair attendu par le contrôle Label.
Si je fais exactement la même chose en utilisant une page différente dans la même application, la page se charge bien après la publication F5. Les deux pages Web héritent de la même classe de base et utilisent les mêmes contrôles personnalisés. La page qui cause des problèmes n'a aucun contrôle ajouté dynamiquement. Après avoir débogué le processus, il semble que l'événement LoadViewState ne soit pas déclenché après la publication F5 pour les contrôles de la page qui se chargent correctement. SaveViewState est déclenché dans les deux cas.
Des idées pour lesquelles l'événement LoadViewState serait déclenché pour une page mais pas l'autre? Je suis assez nouveau sur ASP.NET et je continue à comprendre comment ViewState fonctionne.