実際にあなたの質問に答えるために、他の誰もがあなたにこれをしてほしくないようです、そして私は同意します...私は以前にこの種のことをしました。
私が最初にすることは、あなたのページにインターフェースを実装させることです。
コントロール内:
IVansFannelDataProviderPage provider = this.Page as IVansFannelDataProviderPage;
if (provider != null) { //grab data from interface } else throw YouCantPutThisControlOnThisKindOfPageException();
これは最もエレガントな方法ではありませんが、非常に高価なオブジェクトを共有したいコントロールがたくさんある場合、これは法案に適合します。
これはうまく機能しますが、インターフェースを実装していないページではコントロールが使用できなくなり、コントロールがページに緊密に結合されすぎます。ページにコントロールからデータを取得させると言っている他の人は誰でも正しいです。コントロール内のページではなく、ページ上にコントロールを配置します。
あなたはそれをするために非常に正当な理由があるはずです。私たちにとって:共有オブジェクトのロードは非常に高価であり、そのオブジェクトでどのコントロールが機能しているかに関係なく、ページをロード/保存することは非常に便利でした。
コントロールを機能させるためだけに、ある種のサポートまたはプロキシサポートを提供するために、インターフェイスを実際に実装していない多くのページを調整する必要があり、ページとコントロールの再利用性が大幅に低下したのは残念でした。
これをもう一度やり直す必要がある場合は、ページにイベントを含むコントロールにデータを送信させます。怠惰になる必要がある場合は、おそらくリフレクションを使用します。