Lors de l'extension d'un contrôle Web asp.net, à quel événement des contrôles Web supplémentaires doivent-ils être injectés?
-
08-07-2019 - |
Question
J'essaie d'éviter un contrôle composite ou d'utiliser et ASCX en étendant un contrôle existant. Cependant, je ne parviens pas à ajouter les contrôles au contrôle hérité et à conserver leur intégrité état d'affichage / post-retour. Chaque fois que j'ajoute les contrôles pendant le pré-rendu, ils apparaissent, mais le post-back lève une exception viewstate. J'ai essayé de les ajouter ici et pendant LoadViewState (ce qui était bien sûr un idiot long-shot). Init n'est pas disponible à partir du contrôle que je suis en train d'étendre.
L'exception est Sys.WebForms.PageRequestManagerServerErrorException: Impossible de charger viewsstate. Le contrôle arbre dans lequel viewstate est chargé doit correspondre à l'arbre de contrôle qui a été utilisé pour sauver viewstate pendant la demande précédente. Par exemple, lors de l'ajout dynamique de contrôles, le contrôles ajoutés lors d'un post-back doit correspondre au type et à la position du contrôles ajoutés lors de la première demande
La solution
En fait, Microsoft vous conseille de remplacer le Méthode CreateChildControls .
Vous pouvez appeler la méthode de la classe de base avant ou après l'ajout des contrôles. Je ne sais pas s'il existe une convention.
protected override void CreateChildControls(){
Controls.Add(someControl);
base.CreateChildControls();
}
J'espère que ça aide!
Autres conseils
Vous devez les ajouter à OnInit ou à CreateChildControls. Quoi qu'il en soit, pour éviter tout problème avec ViewState, lisez cet excellent article . Éventuellement, échantillon "4. Initialisation par programme des contrôles enfants " est votre cas.