Pour répondre réellement à votre question, autant que tout le monde semble ne pas vouloir que vous fassiez cela, et je suis d'accord ... J'ai déjà fait ce genre de chose auparavant.
La première chose que je ferais est de faire de votre page une interface.
Dans le contrôle:
IVansFannelDataProviderPage provider = this.Page as IVansFannelDataProviderPage; if (provider != null) { //grab data from interface } else throw YouCantPutThisControlOnThisKindOfPageException();
Ce n'est pas la façon la plus élégante de le faire, mais quand nous avons eu beaucoup de contrôles qui souhaitent partager un objet très cher cette l'affaire.
Cela fonctionne bien, mais rend votre contrôle inutilisable sur les pages qui n'implémentent pas l'interface - et qui rend les contrôles trop étroitement couplés à votre page. Tout le monde disant que la page obtient les données des contrôles est correct; vous mettez des contrôles sur la page, pas des pages dans les contrôles.
Vous devriez avoir une très bonne raison de le faire. Pour nous: la charge de l'objet partagé était très chère, et le fait de charger/sauvegarder la page quel que soit le contrôle sur cet objet était très utile. Il était dommage que beaucoup de pages qui n'implémentent pas vraiment l'interface aient été utilisées pour fournir une sorte de support ou de support de proxy juste pour que les contrôles fonctionnent, et ont fait les pages et les commandes autant moins réutilisable.
Si je devais le refaire, la page enverrait des données aux contrôles avec des événements, probablement par réflexion si j'avais besoin d'être paresseux.
Ceci est une excellente réponse, mais je ne peux pas l'utiliser parce que les contrôles sont chargés dynamiquement. Peut-être que je vais utiliser des champs cachés. Je vous remercie. – VansFannel
Vous devez utiliser ViewState pour conserver l'état du contrôle. – Oded
Et comment puis-je détenir les valeurs des protections publiques sur ViewState? J'essaie de le faire, mais myIntValue est toujours zéro. – VansFannel