3

私がしばらく考えていた質問 - Stackoverflow ユーザーは通常、重要な機能をコンストラクター (具体的には System.Web.UI.Page クラスから派生したクラス) に実装するのでしょうか、それともここでのロジックをできるだけシンプルに保つべきでしょうか。代わりに、OnPreInit に機能を実装します (コンストラクターを使用して、ページの残りの部分の機能が機能するために必要なオブジェクト/値をインスタンス化するだけです)? このシナリオに対する「ベストプラクティス」のアプローチはありますか?

この質問の背景:

私が取り組んでいるシステムには、かなり深いページ階層があります。実際のページが派生する約 10 個のチェーン ページ オブジェクトがあります。

-- System.Web.UI.Page
----- CustomPage1 : System.Web.UI.Page
-------- カスタムページ 2 : カスタムページ 1
----------など

各ページは特定の機能を追加します。多くの場合、カスタム ページ コンストラクター内で実行されるコードに依存するか、構築中に機能自体が直接実行されます。

私の質問を最もよく説明する例は、ページのライフサイクル中に使用できるように、データベースからページにカスタムオブジェクトをロードするページです-ページ構築中にデータベースへの接続が確立され、パブリックプロパティに正しい値が入力されます

私の考えでは、これは OnPreInit イベントから行う方が良いです。これは主に、親ロジックが実行される前にページ レベルのチェックを実行する柔軟性が高いためです (たとえば、この機能が呼び出されないようにする必要があります)。の実行は、子クラスの前に親クラスを構築します)。OO の観点からも、OnPreInit はこの機能を実装するためのより適切な領域のようです。ページの構築では、ページの構築、デフォルト値の設定などを処理する必要があります。ページのライフサイクル。

4

3 に答える 3

1

実際の機能に応じて、OnPreInit の代わりに OnInit または OnLoad を使用することをお勧めします。OnPreInit は、テーマまたはマスター ページの動的な設定をサポートするために導入されました。これは、ライフサイクルの後半では実行できません。

于 2009-02-24T16:02:45.810 に答える
1

あなたの推論は非常に健全だと思います-そのOnPreInitような論理の適切な場所であることに同意します.

于 2009-02-24T15:50:29.320 に答える
0

ポストバックの場合、ViewState OnPreInit からコントロール値が復元されていないことに注意してください。

MSDNでは、イベントの使用に関する提案を行っています。「ライフサイクル イベント」を参照してください。例:

  • PreInit - 動的コントロールの作成または再作成
  • Init - このイベントを使用して、コントロール プロパティの読み取りまたは初期化を行います。
  • Load - OnLoad イベント メソッドを使用して、コントロールにプロパティを設定し、データベース接続を確立します。
于 2009-02-24T16:09:45.683 に答える