2010-02-05 5 views
1

Le message suivant apparaît dans notre journal:Les raisons pour lesquelles la validation ViewState ne parvient (mais seulement parfois)

L'arbre de commande dans lequel VIEWSTATE est en cours de chargement doit correspondre au contrôle arbre qui a été utilisé pour sauver viewstate lors de la demande précédente. Pour par exemple, lors de l'ajout dynamique des contrôles , les contrôles ajoutés pendant un post-retour doivent correspondre au type et la position des contrôles ajoutés au cours la demande initiale.

Eh bien, c'est assez clair, et beaucoup a été écrit à ce sujet. Cependant, je ne peux pas reproduire ce comportement, et je ne trouve que quelques milliers d'erreurs par jour dans les journaux; donc ce n'est probablement pas si évident.

La page en question a un UpdatePanel et charge l'un des trois contrôles usuels en fonction de la chaîne de requête.

Y at-il un problème connu avec certains clients, ou toute autre explication possible?

Répondre

0

Un possible question pourrait être que

  • vous chargez dynamiquement des contrôles
  • vous faire une ID
  • leur donne pas explicitement l'ordre dans les loisirs de ces contrôle est différent (GET vs. POST)

J'ai eu un tel problème une fois. Répéteur sont également de bons candidats pour un tel comportement, car chaque élément est un INamingContainer. Si le contenu du répéteur change au cours de la publication, vous risquez d'obtenir cette erreur.

0

J'ai vu ce comportement dans les cas où les panneaux de mise à jour sont sur la page et une valeur quelque part en dehors de cela est modifiée mais jamais propagée au client.

La solution consiste à s'assurer que toute valeur qui est modifiée sera mise à jour côté client. Ainsi, lorsque la publication se produit, toutes les données correspondent à ce qui est supposé être côté serveur.

Si vous avez de telles données, vous pouvez également les mettre dans un panneau de mise à jour.

Réglez UpdateMode="Conditional" dessus et dans votre codebehind vous pouvez simplement appeler la méthode des panneaux de mise à jour .update lorsque vous avez besoin de la mettre à jour.

Questions connexes