3

約 5 か月前、私は現在の雇用主のために新しいイントラネット サイトを作成する任務を負っていました。このサイトでは、複数の.NET言語 ( classic aspVB、およびC#) を複数.NET frameworks(1.0、2.0、3.5、4.0 を含むいくつかの場所) で使用しています。実装とテストに 1 時間しかかからない単純な変更は、実装するだけで数日かかる場合があります。

新しいイントラネット サイトのコンテンツは、表示中のページとアクセス レベルに基づいて、読み込み時に動的に読み込まれるユーザー コントロールによって制御されます。各ユーザー コントロールには特定のタスクがあり、ページ上の他のユーザー コントロールには影響しません。

約 3 週間前、私のデータベース担当者 (前職はアプリケーション開発者) が中間管理職に、ユーザー コントロールが相互に対話し、各ユーザー コントロールで利用可能な選択に影響を与えるというアイデアを提案しました (これらはすべて、私の知らないうちに行われました)。

最初聞いた時はありえないと思いました。次に、ユーザーコントロールが相互に通信することについて私が読んだすべては、ユーザーコントロールがお互いを知る必要があり、すべてのユーザーコントロールが実行時にアクセスレベルに基づいてロードされるため、それは不可能であることを示しました。先週、ユーザー コントロールにカスタム イベント ハンドラーを起動させ、他のユーザー コントロールにその特定のカスタム イベント ハンドラーをリッスンさせるという解決策を見つけました。

さて、今日、サイトの連絡先管理部分にフィルタリングを追加できるかどうか尋ねられました。このサイトには、すべてのクライアントがリストされています。これは、Ebay が左側にフィルターを配置して、返された結果をさらにドリルダウンできるようにするのと似ています。たとえば、「フラット スクリーン テレビ」を検索します。Ebay は検索に一致するすべての結果を一覧表示し、左側でサイズ範囲またはブランドを選択して結果を絞り込むことができます。

設定したページで、条件と結果を処理する 3 つのユーザー コントロールを読み込みます。Control1すべての基本的な検索条件 (業界、地域、状態など)control2があり、からの結果をドリルダウンするためのフィルターがありますcontrol1Control3コントロール 1 の条件に基づいてクライアントを表示します (つまり、コントロール 1 がイベントを発生させてcontrol2聞き取りcontrol3、両方ともコントロール 1 に基づいて結果を表示します)。ここで基準を選択し、結果を聞いて表示できるcontrol2イベントを起動します。control3

これはすべて機能しますが、私が抱えている問題は、コントロールcontrol2が動的に構築され、イベントが発生するcontrol1と->control2イベントを発生させるためにポストバックされ、コントロールができないため、control3すべての動的コントロールが失われることです。コントロール 1 のカスタム イベントから渡された値が存在しなくなったため、でcontrol2再作成されます。fromのカスタム イベントに渡された値を保存する、またはポストバック時に値を再渡して取得し、動的コントロールを再作成するための最良の方法は何ですか?Page_Initcontrol2control1control2control1control1control2control2

注: セッションを使用してみましたが、最初の検索後に control1 から値を再割り当てするのに問題がありました。それらが機能しない理由は、control1 の設定方法が原因であり、動的コントロールの作成がcontrol2セッション値の取得をスキップしているためだと思います。

(できれば)役立つ回答をお寄せいただき、ありがとうございます。

更新
'control2' がポストバックされたときに 'control2' の動的コントロールが再作成されなかった理由は、実行時にデフォルト ページにユーザー コントロールをロードしていた方法であることが判明しました。私のデフォルトページは、「page_init」ではなく「page_load」にユーザーコントロールをロードしました(他のすべてのページと同様に、ユーザーコントロールのロードを「page_init」に移動するのを忘れていたに違いありません)。切り替えが行われ、動的コントロールがポストバックで再作成されます。

コードを「page_load」から「page_init」に移動した後に発生した唯一の問題は、「チェックボックス」コントロールをチェックしたにもかかわらず、ポストバック時にチェックが外されることでした。いくつかのセッション変数を使用して、これを克服することができました。

4

1 に答える 1

0

これは一般的な問題です。

イベントで動的に作成されたコントロールのみがpage_initポストバックを生き残ることができます。

の間page_initに、動的に作成されたコントロールはの一部になりDOM、それによってsessionstates。コードをリファクタリングして、中に動的コントロールの作成を実行できる場合page_init、コントロールは存続するはずです。

アップデート:

あなたのコメントと投稿から、あなたはセッションの使用に消極的であることがわかりました。問題は、セッションがコントロールを保存する唯一の方法であるということです。

  • このケースに対処する1つの方法は、コントロールのリストを使用してクラスオブジェクトを作成することでした。ページに戻ったとき、オブジェクトが存在する場合は、それをデフォルトとして使用しました。
  • これにアプローチする2番目の方法は、検索条件をSessionに保存し、その条件を動的コントロールの作成方法にフィードすることでした。
于 2013-02-06T05:20:27.193 に答える