J'ai un conteneur d'onglets ajax toolkit sur ma page ASP.Net, et je crée dynamiquement les onglets dans le code (à l'exécution, j'ai un nombre variable de onglets, chacun avec la même mise en page mais avec des données d'en-tête et de corps différentes). Chaque onglet contient un seul contrôle, un contrôle utilisateur que j'ai créé pour que tous les onglets aient la même apparence. Dans le contrôle de l'utilisateur est un autre contrôle utilisateur que j'ai construit pour gérer la pagination de mes données dans l'onglet. Ce contrôle utilisateur de pagination a une propriété qui est sauvegardée dans ViewState.Problèmes de rechargement de viewState de mes contrôles ASP.Net créés dynamiquement
Je lie toutes les données pour les onglets dans une seule fonction BindData sur la page ASPX. Au sein de cette fonction, je définis toujours un ID pour mes contrôles créés dynamiquement et les ajoute à leurs contrôles de conteneur avant de définir d'autres propriétés, de câbler des événements ou de lier des données à ceux-ci.
Je suis en train de perdre la valeur de la variable ViewState dans mon contrôle utilisateur d'échange dans ce scénario:
page ASPX
Page_Init:
If IsPostBack Then
BindData ' Recreates the control tree on postback.
' ViewState is loaded successfully here.
End If
Page_Load:
If Not IsPostBack Then
BindData() ' Bind the initial data.
End If
[Some event that happens after Page_Load in response to clicking on my user control]:
...
BindData() ' Controls recreated with changed data but same IDs as in Page_Init.
' ViewState does not get loaded back into my control tree.
Dois-je attendre pas le ViewState pour obtenir à nouveau chargé sur la deuxième version de mon arbre de contrôle dans le cycle de vie de la page?
Avez-vous essayé de vous brancher le contrôle de code de création en pré-init? JUst pour voir si cela vous évite de réattribuer manuellement les valeurs de viewstate. Bien que vous l'ayez déjà fait fonctionner :) –
Le problème est dans ASP.NET il oublie l'état d'affichage dès qu'il a été lié une fois. Cela se produit après init mais avant le chargement. L'état d'affichage ne peut pas être lié deux fois au cours de la même requête, même si vous recréer exactement le même arbre de contrôle. Annyoing, oui! –