2011-01-17 11 views
3

最近のインタビューでは、次の質問がありました。異なる実行順序の目的:Init()とLoad()

• A Master page which contains 
    • An ASPX web form page which contains 
     • A Web User Control inside the page which contains 
     • A button to fire some code in a button_click event 

(最も外側に最も内側の)

aspx.page Begin Init 
    –> Inside user control Page_Init 
    –> Inside master page Page_Init 
    –> Inside lifecycle page Page_Init 
aspx.page End Init 

と読み込み時のイベント発生させますのInitイベントが発生します

aspx.page Begin Load 
    –> Inside lifecycle page Page_Load 
    –> Inside master page Page_Load 
    –> Inside user control Page_Load 
aspx.page End Load 

なぜLoad()でASP.NETフレームワークのサポート異なる実行順序を行いますインタビューで尋ねられた質問でした。インタビュアーが私に期待していることは分かりません。

お願いします。

答えて

9

私はASP.NET page life cycleについて読むことをお勧めします。

2つの目的は異なるため、実行順序が異なります。

初期化:ページの初期化中に

、ページ上のコントロールが利用可能であり、各コントロールのUniqueIDプロパティが設定されています。該当する場合は、マスターページとテーマもページに適用されます。現在の要求がポストバックの場合、ポストバックデータはまだロードされておらず、コントロールのプロパティ値はビューステートの値に復元されていません。

荷重:

負荷時の電流要求がポストバックである場合、制御特性は、ビュー状態と制御状態から復元された情報がロードされます。

また、あなたは(他の方法で回避、マスターページは、実際にはコンテンツページに含まれていません)マスターページとコンテンツページの間relationshipを理解する必要があり、complete life cycle of both


ので、初期化時に、ユーザーコントロールが最初に初期化する必要があるので、彼らは彼らのコンテナに使用可能であり、その後、マスターページには内容が完了し、コンテンツページに用意されていて、ページそのものですので、制御階層の初期化。負荷時には

今、すべてのポストバックデータが設定されていると、すべてのコントロールは準備ができていると彼らのさまざまなイベントを発射できるよう、反対に、起こります。一番上のコンテナで、内容ページが最初に読み込まれ(マスターページとユーザーコントロールを変更できるように)、次にマスターページに、最後にリーフコントロールが読み込まれます。

+0

インタビュアーの質問:「なぜASP.NETフレームワークがLoad()とInit()で異なる実行順序をサポートするのですか?」 – hunter

1

理由は制御管理のためです。場合によっては、コントロールを動的に作成する必要があり、正しく動作させるためには、onload()ではなくinitで再作成する必要があります。 onInitコントロールを再作成しないと、動的コントロールが正しく機能しなくなります。