1

にプログラムでコントロールを追加することについて、いくつか質問がありますaspx。いくつかの調査を行った後、これを正しく理解していることを確認したいだけです。

プログラムでコントロールを追加しようとするときは、page life cycle.

  1. プログラムで作成してコントロールを追加できる最新のものは にありpage_loadますか?

  2. でコントロールを作成するのがベスト プラクティスですか?initialization phaseこれはview stateがロードされる前だからですか?

  3. それぞれにコントロールを再作成し続ける必要がありますpost backか? または、一度作成して永続化する方法はありますか?

  4. onInitに存在するフェーズのコントロールを変更すると、ロードview state時に自動的に置き換えられますか?view state

  5. ContentTemplateContainer.Controls.Add(...)子コントロールを追加しますか? たとえば、ボタンで満たされたグリッドビューで満たされたテーブルを追加しようとするとpartial post back、それらのボタンの 1 つがクリックされたときにエラーが発生しますか? そうでない場合、どのように子コントロールをに追加することになっていUpdatePanelますか?

今のところ考えられる質問はこれだけです。皆さんが私に与えることができる明確化は素晴らしいでしょう!

4

1 に答える 1

1

MVC ではなく Web フォームについて話していると仮定すると、ライフサイクルのどの段階でも新しい動的コントロールを追加できます。ただし、応答を準備しているため、ポストバック (サーバー側のイベントを含む) が発生するたびに、最初に動的コントロールを追加したページのインスタンスとは異なるページのインスタンスで作業していることを覚えておくことが重要です。別の http リクエストの場合。それを明確に理解すると、他のすべてがより理にかなったものになり始めます。

ボタンのクリックに応答してページにコントロールを追加します。ボタンのクリック イベントで安全に行うことができます。これは、ページのライフ サイクルの非常に遅い段階です。しかし今、ユーザーは別のポストバックをトリガーするために何かをします。この時点で、以前とは異なるページ クラスのインスタンスで作業しています。ポストバックの完了後もダイナミック コントロールをページに残しておきたい場合は、再度ダイナミック コントロールをページに追加する必要があります。このコントロールに ViewState も使用する場合は、Page_Load イベントの前(最中ではない) にこれを行う必要があります。これを行う最も一般的な場所は Page_Init です。

それはあなたのポイントのほとんどをカバーしていると思います。

于 2012-06-29T19:45:04.513 に答える