2009-03-04 17 views
1

コントロールのCreateChildControlsメソッドが呼び出される前に、カスタムWebコントロールでプロパティを設定しようとしています。なぜなら、問題のプロパティの値に依存する多くのロジックがそこで実行されるからです。私はHTMLの明示的な値でプロパティを直接設定することができ、それは時間内に取得されますが、サーバー側の変数に基づいている必要があるため、私には役に立たないです。CreateChildControlsが呼び出される前にコントロールのプロパティを設定する

トリッキーなビットは、EnsureChildControlsメソッドが、ASPXファイル内のタグに対応するコントロールのCONTENTSプロパティのゲッターから呼び出されていることです。例えば。;

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

私の知る限りでは、これは順番に上書きされたCreateChildControlsのメソッドをトリガー、およびロジックが、私が設定しようとしているプロパティの正しい値なしで実行されます。

私は、.NETの "CONTENT"プロパティのgetterにアクセスする前に、私のページのASP.NETライフサイクルで自分のプロパティを設定できるように設定することができます。私のコントロール?

親ページでOnPreInitを試しましたが、それでもコントロールのCreateChildControlsの後にヒットしています。私はまた、汎用コントロールであるため、コントロール自体を変更したくないので、この特殊なケースに対して特別なケースを望んでいません。

誰でも自分のプロパティの値を設定して、達成しようとしている順に選択できるアイディアがありますか?

答えて

3

私のテストでは、状況のWebコントロールを変更しなければ、それはできません。 Webフォームが解析されると、htmlで定義されたすべてのコントロールがTemplateControl.FrameworkInitializeメソッドの間に作成されます。これには、内部プロパティのgetアクセサを呼び出すことが含まれます。残念なことにFrameworkInitializeはProcessRequestの間に呼び出されます。これはProcessRequestMainの前にあり、ページのライフサイクルの残りの部分を制御します。

FrameworkInitializeをオーバーライドすることはできますが、作成前またはプロパティを設定するのが遅すぎる場合にのみ、Webコントロールにアクセスできます。

私は常にthis imageがページのライフサイクルを解読しようとしているのを発見しました。

+0

非常に有益な答え、ありがとう。 –

関連する問題