web-dev-qa-db-fra.com

Impossible de charger viewstate. L'arbre de contrôle dans lequel viewstate est chargé

Je reçois le message d'erreur suivant après un HTTP POST sur un formulaire ASP.NET hébergé dans un UserControl:

Impossible de charger viewstate. L'arbre de contrôle dans lequel viewstate est en cours de chargement doit correspondre à l'arborescence de contrôle utilisée pour enregistrer l'état de vue lors de la requête précédente. Par exemple, lors de l'ajout dynamique de contrôles, les contrôles ajoutés lors d'un post-retour doivent correspondre au type et à la position des contrôles ajoutés lors de la demande initiale.

Voici des informations supplémentaires:

  • J'exécute .NET 4.5 RC
  • C'est un site web basé sur Umbraco 4.7
  • Sur ma machine de développement locale, le formulaire fonctionne parfaitement
  • Cette erreur ne survient que sur le serveur de stockage intermédiaire .NET 4.5 (uniquement), MSSQL 2012 Express, IIS 7.5, Windows 7 (je sais, ce n'est pas encore un vrai serveur, peut-être un jour ...)
  • Le serveur ne fait pas partie d'une ferme Web (ou d'un jardin, mais devrait être irremplaçable)
  • Le contrôle utilisateur fait rend les contrôles de manière dynamique

J'ai appliqué tous les derniers Service Packs . Je n'ai plus d'idées! Je l'ai même redémarré et j'ai également effectué un richual sur le serveur avec une chanson et une danse spéciale, mais en vain.

12
krisdyson

OK, la réponse est donc littéralement: "Configurez un nouveau serveur avec le même logiciel que le dernier et essayez à nouveau" et cela fonctionne maintenant. 

1
krisdyson

Lorsque vous ajoutez des contrôles de manière dynamique, l’important est de savoir à quel événement vous les ajoutez.

Si vous avez ajouté des contrôles sur les événements survenant après le chargement, ils feront partie de l'état de vue que vous envoyez au client.

Vous devrez ajouter ces contrôles à nouveau avant que LoadViewState soit appelé.

Si vous rencontrez des cas dans lesquels la décision d'ajouter des contrôles à ajouter est elle-même stockée dans la variable ViewState ou la valeur d'un contrôle, alors souvenez-vous que même avant que la variable ViewState ne soit chargée, ces données sont disponibles dans Request.Params

Référez-vous au cycle de vie de la page asp.net

Page life cycle

20
nunespascal

Je viens d'ajouter EnableViewState="false" à mon espace réservé de page et c'est parti. J'espère que cela fonctionne pour vous aussi.

19
Hooman

Cette erreur se produit principalement lors de l’état de la vue. Modification: d’un modèle à un autre, comme dans le cas du modèle d’élément, Modifier le modèle d’élément, dans les contrôles tels que Affichage du formulaire, Vues de liste, Vue de détail, Affichage de la grille dans ASP .net (tous cadres);

En changeant d'états de contrôle, dites Item Template ---> Edit Template Les modifications suivantes allaient changer

1) Les contrôles vont changer (son ID et ses états)

2) Ses positions vont changer.

Pendant la transformation de la vue, si un post-retour se produit, vous obtiendrez Error as 

Impossible de charger viewstate. L'arbre de contrôle dans lequel viewstate est être chargé ....

si vous utilisez un contrôle séparé pour la liaison de données tel que (bouton, événements link_button_Image_button), cette erreur sera signalée!

Pour éviter cette erreur >>> Une fois que l'état passe d'un modèle à l'autre au sein de la méthode, vous appelez la liaison de source de données (n'appelez pas lors d'un clic ou de tout événement de post-sauvegarde).  

4

J'ajoute l'attribut "name" avec la même valeur que id, alors ce problème a disparu. 

<input type="button" id="extractBomInfoBtn" name="extractBomInfoBtn" value="Extract" class="button   textonly" />
0
David

Vérifiez si vous avez la méthode de liaison du contrôle directement dans votre événement de chargement de page. Cela peut causer ce problème.

0
SubqueryCrunch

J'ai eu le même problème. Ce problème concernait le client mais il ne se produisait pas dans mon système local . Après des heures de recherches sur Google, j’avais écrit EnableViewState = "false" dans la balise de la table dans la page aspx contenant tous les contrôles dynamiques, puis supprimé. toutes les variables viewstate et à la place, j’ai créé des zones de texte masquées dans la page aspx et y ai accepté les valeurs de la base de données, puis les ai utilisées tout au long de mon code. Cela a ensuite résolu mon problème… .. Mais je ne pouvais toujours pas comprendre ce qui était exactement le problème.

0
user6785638

Vous pouvez ajouter un nouveau PlaceHolder par UserControls 

OR

Vous pouvez définir enableviewstate=false sur le contrôle, si vous n'avez pas besoin de viewstate

0
Omid Farvid

Cela peut se produire si vous remplacez SaveViewState dans votre contrôle sans remplacer LoadViewState 

0
David Kemp

Dans mon cas, j'avais une vue de grille avec l'événement (OnPageIndexChanging) Et lorsque je clique sur une page, rien ne se passe tant que je n'y clique pas deux fois!

J'actualisais la source de données avant de définir un nouvel index de page.


C'est ce que je faisais mal

grd.DataSource = data;
grd.DataBind();
grd.PageIndex = e.NewPageIndex;

C'est le bon chemin

grd.PageIndex = e.NewPageIndex;
grd.DataSource = data;
grd.DataBind();
0
iYazee6