2009-06-02 11 views

答えて

11

通常、Load()以降でバインドする必要があります。 Init()イベントは、バインディングを実行する前に動的に作成されたコントロールを作成し、バインドが必要なときに存在するようにします。 Load()は唯一のオプションではありませんが、何らかの理由でコントロールのバインディングを遅延させる必要がある場合は、PreRender()イベントでバインドすることもできます。また、Load()でさらに設定を行い、ページのDataBind()メソッドを呼び出して、必要に応じてさらに構造化された方法でバインドするページバインディングイベントを処理することもできます。

+0

+1すべての子に対して再帰的に 'EnsureChildControls'を呼び出すため、' PreRender'(これは言及しておきません)に言及しています。 – Cerebrus

+1

ベストプラクティスはありますか?最初から選択するイベントが非常に多いため、ベストな選択肢がないようです。特にPreRenderとコントロールのDataBindingイベントハンドラ。ああ、MVCのために良さに感謝 –

+1

同上@ MVC。 :Dベストプラクティスは、Load()で始まり、必要に応じて絞り込みます。 Load()は、後でバインドする必要があるという事実を知っていないか、ページ全体のDataBindをトリガーする特定の理由がある場合を除いて、通常は開始するのに最適な場所です。ほとんどの場合、PreRenderでバインドする必要がある場合、コントロールにバインドされているものが最初に完了する他のプロセスに依存している場合によく発生する実行と順序付けの問題が原因です。 – jrista

3

ただし、最も一般的な回答はPage_Loadです。ほとんどのデータバインディングシナリオでは一般的に十分です。 GridViewのようなコンテナコントロールがPage_Loadイベント中だけで子供たちを読み込むため

は、複雑なデータバインディングシナリオで、Page_Initないは、適切な場所でしょう。それらの子供たちにアクセスするには、ライフサイクルをさらに下げる必要があります。

私の場合、答えは「どちらも」ではありません。これは私が決してPage_Loadの中のコントロールを直接データバインドしていないからです。私が代わりに好むのは、データバインディングを行い、ポストバック後に再バインドする必要がある場合は、Page_Loadやその他の関数から呼び出すことができる別のメソッドを持つことです。

関連する問題