そのコントロールのイベントは「暗黙の」トリガーとして機能するため、ネストされた UpdatePanel 内のコントロールによって最上位の UpdatePanel が更新される (したがって、両方の UpdatePanel が更新される) という印象を受けます。あれは正しいですか?
私はこのようなものを配線しようとしてきました-
UserControl
Parent UpdatePanel
"Show" button
ASP:Panel
Dynamically added UserControls, each with UpdatePanels
[表示] ボタンをクリックすると、ASP:Panel が表示され、いくつかのバックエンド ロジックに基づいて、それ自体に UserControls を動的に追加し始めます。
動的に追加された各コントロール (以下、UserControls) には、それぞれ独自の Atlas 対応のボタンとリンクがあるため、UpdatePanels もあります。現在、UserControls の 1 つのリンクをクリックすると、ASP:Panel のコンテンツ全体が再レンダリングされているかのように消えます。動的に追加されたすべてのコントロールが非表示になり、クリック イベントがデバッガーにキャッチされません。
ここで起こっていることは、ネストされた更新パネルに存在するコントロールが、「暗黙の」トリガーを起動しているため、親の UpdatePanel をポストバックさせていることだと思います。UserControls が自律的に動作し、それらを含む ASP:Panel を台無しにしない方法はありますか?
そうでない場合、ここでどのような戦略を追求する必要がありますか? (おそらく多数の) UserControls の 1 つでイベントが発生するたびに ASP:Panel 全体を再レンダリングする必要がある場合は、UserControls を再作成する必要があり、作成に少し手間がかかります。また、それらを再作成するには、ある種のビュー ステートを保持する必要があります。私はASP.NETに少し慣れていないので、威圧的に聞こえます。できれば最上位の UserControl と ASP:Panel を更新せず、動的に追加された各 UserControl を起動させ、独自のイベントを非同期的に処理させます。
編集:コントロールを動的に追加する代わりに、マークアップに追加しました(悪い解決策ではありません)。コントロールが動的に追加されるのではなく、マークアップに存在するようになったため、コントロールが消える問題はなくなりました。ただし、1 つではなくすべての UserControls がポストされるため、親 UpdatePanel のポストは依然として大きなパフォーマンス ヒットです。UserControl ポストバックを 1 つだけ作成するにはどうすればよいですか? また、動的に追加した場合にコントロールが消える問題を解決する方法を知りたいですか?