3

複数のユーザー コントロールを動的に表示または非表示にしたい場合。ユーザーコントロールをロードしてからパネルを表示または非表示にするパネルを使用する方がよいでしょうか (visible=true/false)、または PlaceHolder を使用して実行時にそれらをロード (追加) またはアンロード (クリア) する方がよいでしょうか (LoadControl ())?

a) AJAX UpdatePanel を使用するページがあります。このページには 10 個のパネルがあり、各パネルはユーザー コントロールをロードします。コード ビハインドでは、Panel を表示または非表示にし、一度に 1 つだけ表示します。このソリューションはシンプルです。すべてのユーザー コントロールがページ内にあるため、それらとその内部コントロールを簡単に参照できます。

b) LoadControl を使用してコントロールを動的にロードするのは、もう少し複雑に思えます。

Aの方法と比べて何かメリットがあるのか​​な。ビューステートの問題? レンダリングのパフォーマンスの問題? HTML サイズの問題?

ありがとうございました、

4

1 に答える 1

3

コントロールを動的にロードしてポストバックで再作成することは、aspx-markup でコントロールの可視性を切り替えるよりも常にはるかに複雑でエラーが発生しやすくなります。

パネルとプレースホルダーに違いをもたらしている理由が理解できないことを認めなければなりません。主な違いは、Panel が DIV としてレンダリングされ、PlaceHolder には html がまったくないことだけです。

ページ内にすべての UserControl があるが、表示される UserControl が 1 つだけの場合は、UserControl を遅延ロードする必要があります。つまり、次のことを意味します。

UserControl の Page_Load では何もしませんが、コントローラー (ページ) がそれを表示する場合にのみ行います。したがって、関数を公開してデータをロードし、内部の UpdatePanels を ascx で更新します。次に、関数がページから呼び出され、コントロールが表示された後、ページで UserControl の外側の UpdatePanel を更新します。

このようにして、ユーザーコントロールは表示される前にレンダリングもデータバインドもされず、いつでも直接参照できます。

次の方法で通信させます。

  • ページ > 関数/プロパティによるユーザー コントロール
  • UserControl > イベント経由のページ

結論:

  • オプション B には、ViewState でも HTML-Size でも利点はありません。本当に必要な場合にのみコントロールを動的に作成してください (動的コンテンツ)。
于 2011-04-07T22:07:08.597 に答える