2009-03-04 7 views
1

J'essaie de définir une propriété sur un contrôle Web personnalisé avant l'appel de la méthode CreateChildControls du contrôle. La raison en est qu'il y a beaucoup de logique qui dépend de la valeur de la propriété en question. Je peux définir la propriété directement avec une valeur explicite en HTML et elle est récupérée dans le temps, mais cela ne me sert à rien car elle doit être basée sur une variable côté serveur. Le bit délicat est que la méthode EnsureChildControls est appelée depuis le getter d'une propriété "CONTENTS" du contrôle qui correspond à des balises dans le fichier ASPX. par exemple.;Définition d'une propriété sur un contrôle avant l'appel de CreateChildControls

<myControl> 
<content> 
... 
</content> 
</myControl> 

Pour autant que je sache, à son tour déclenche la méthode CreateChildControls surchargée, et la logique est exécutée sans la valeur correcte pour la propriété que je suis en train de définir. Qu'est-ce que j'essaie de travailler est, où dans le cycle de vie ASP.NET de ma page puis-je définir ma propriété de sorte qu'il est défini avant .NET accède à l'accesseur de la propriété "CONTENT" de mon contrôle?

J'ai essayé OnPreInit sur la page parente, mais cela est toujours en cours après avoir créé CreateChildControls sur le contrôle. Je ne veux pas non plus modifier le contrôle lui-même, car c'est un contrôle générique et je ne veux pas le cas particulier pour ce cas particulier.

Quelqu'un a-t-il des idées où je peux définir la valeur de ma propriété afin qu'elle soit récupérée dans l'ordre que j'essaie d'atteindre?

Répondre

3

De mes tests, cela n'est pas possible sans modifier le contrôle Web dans la situation. Lorsqu'un formulaire Web est analysé, tous les contrôles définis dans le code HTML sont créés au cours de la méthode TemplateControl.FrameworkInitialize, ce qui inclut l'appel de l'accesseur get de toutes les propriétés internes. Malheureusement, FrameworkInitialize est appelée pendant ProcessRequest, qui est antérieure à ProcessRequestMain qui contrôle le reste du cycle de vie de la page.

Vous pouvez remplacer FrameworkInitialize, mais accéder uniquement au contrôle Web avant sa création ou après qu'il est trop tard pour définir la propriété.

J'ai toujours trouvé this image très utile lorsque vous essayez de déchiffrer le cycle de vie de la page.

+0

Réponse très utile, merci. –

Questions connexes