OVH Cloud OVH Cloud

Chargement dynamique de UserControls

1 réponse
Avatar
SD
Bonjour,

J'utilise des chargements dynamiques de UserControl qui peuvent contenir
eux-même des usercontrols.
Dans le PageInit ou le PageLoad (j'ai essayé les 2) de mon MainUserControl
(le niveau le plus haut de mon arborescence de controles) j'ai le code
standard du style:

System.Web.UI.UserControl oControl = (System.Web.UI.UserControl)
this.LoadControl(sUserControlUrl1);
oControl.ID = "ID1...";
// Chargement dans un place Holder du MainUserControl
this.phContent.Controls.Add(oControl);

Or sur un événement click intervenant dans le MainUserControl, je charge un
autre usercontrol en prenant soint de supprimer le précédent car je souhaite
un remplacement :

if (this.phContent.HasControls())
this.phContent.Controls.Clear();
System.Web.UI.UserControl oControl = (System.Web.UI.UserControl)
this.LoadControl(sUserControlUrl2);
oControl.ID = "ID2...";
// Chargement dans un place Holder du MainUserControl
this.phContent.Controls.Add(oControl);

Le pb posé dans ce cas-là est que ces 2 usercontrols peuvent être
foncièrement différent. L'un peut contenir une datagrid et l'autre pas. Or
lorsque je passe de l'un à l'autre j'ai l'erreur suivante :

"Échec du chargement de viewstate. L'arborescence du contrôle sur lequel
viewstate est chargé doit correspondre à l'arborescence du contrôle qui a
été utilisé pour enregistrer viewstate lors de la demande précédente. Par
exemple, lors de l'ajout dynamique de contrôle, les contrôles ajoutés lors
d'une publication doivent correspondre au type et à la position des
contrôles ajoutés lors de la demande initiale."

Je comprends bien d'ou vient l'erreur, mais hélas j'ai besoin tant que je
reste sur le même usercontrol de conserver le viewstate.
Ma question est alors: y a t'il un moyen d'inhiber le chargement du
viewstate dans le cas ou je passe du usercontrol1 au usercontrol2 ?

Merci par avance de vos réponses.

Cdt

SD

1 réponse

Avatar
Paul Bacelar
Le plus simple est de travailler sur la visibilité des contrôles, plutôt que
de les créer ou de les supprimer.
--
Paul Bacelar
MVP VC++

"SD" wrote in message
news:
Bonjour,

J'utilise des chargements dynamiques de UserControl qui peuvent contenir
eux-même des usercontrols.
Dans le PageInit ou le PageLoad (j'ai essayé les 2) de mon MainUserControl
(le niveau le plus haut de mon arborescence de controles) j'ai le code
standard du style:

System.Web.UI.UserControl oControl = (System.Web.UI.UserControl)
this.LoadControl(sUserControlUrl1);
oControl.ID = "ID1...";
// Chargement dans un place Holder du MainUserControl
this.phContent.Controls.Add(oControl);

Or sur un événement click intervenant dans le MainUserControl, je charge
un autre usercontrol en prenant soint de supprimer le précédent car je
souhaite un remplacement :

if (this.phContent.HasControls())
this.phContent.Controls.Clear();
System.Web.UI.UserControl oControl = (System.Web.UI.UserControl)
this.LoadControl(sUserControlUrl2);
oControl.ID = "ID2...";
// Chargement dans un place Holder du MainUserControl
this.phContent.Controls.Add(oControl);

Le pb posé dans ce cas-là est que ces 2 usercontrols peuvent être
foncièrement différent. L'un peut contenir une datagrid et l'autre pas. Or
lorsque je passe de l'un à l'autre j'ai l'erreur suivante :

"Échec du chargement de viewstate. L'arborescence du contrôle sur lequel
viewstate est chargé doit correspondre à l'arborescence du contrôle qui a
été utilisé pour enregistrer viewstate lors de la demande précédente. Par
exemple, lors de l'ajout dynamique de contrôle, les contrôles ajoutés lors
d'une publication doivent correspondre au type et à la position des
contrôles ajoutés lors de la demande initiale."

Je comprends bien d'ou vient l'erreur, mais hélas j'ai besoin tant que je
reste sur le même usercontrol de conserver le viewstate.
Ma question est alors: y a t'il un moyen d'inhiber le chargement du
viewstate dans le cas ou je passe du usercontrol1 au usercontrol2 ?

Merci par avance de vos réponses.

Cdt

SD