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'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.
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.
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
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.
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).
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" />
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.
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.
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
Cela peut se produire si vous remplacez SaveViewState
dans votre contrôle sans remplacer LoadViewState
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();