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?

StackOverflow https://stackoverflow.com/questions/296609

  •  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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top