約 5 か月前、私は現在の雇用主のために新しいイントラネット サイトを作成する任務を負っていました。このサイトでは、複数の.NET
言語 ( classic asp
、VB
、およびC#
) を複数.NET frameworks
(1.0、2.0、3.5、4.0 を含むいくつかの場所) で使用しています。実装とテストに 1 時間しかかからない単純な変更は、実装するだけで数日かかる場合があります。
新しいイントラネット サイトのコンテンツは、表示中のページとアクセス レベルに基づいて、読み込み時に動的に読み込まれるユーザー コントロールによって制御されます。各ユーザー コントロールには特定のタスクがあり、ページ上の他のユーザー コントロールには影響しません。
約 3 週間前、私のデータベース担当者 (前職はアプリケーション開発者) が中間管理職に、ユーザー コントロールが相互に対話し、各ユーザー コントロールで利用可能な選択に影響を与えるというアイデアを提案しました (これらはすべて、私の知らないうちに行われました)。
最初聞いた時はありえないと思いました。次に、ユーザーコントロールが相互に通信することについて私が読んだすべては、ユーザーコントロールがお互いを知る必要があり、すべてのユーザーコントロールが実行時にアクセスレベルに基づいてロードされるため、それは不可能であることを示しました。先週、ユーザー コントロールにカスタム イベント ハンドラーを起動させ、他のユーザー コントロールにその特定のカスタム イベント ハンドラーをリッスンさせるという解決策を見つけました。
さて、今日、サイトの連絡先管理部分にフィルタリングを追加できるかどうか尋ねられました。このサイトには、すべてのクライアントがリストされています。これは、Ebay が左側にフィルターを配置して、返された結果をさらにドリルダウンできるようにするのと似ています。たとえば、「フラット スクリーン テレビ」を検索します。Ebay は検索に一致するすべての結果を一覧表示し、左側でサイズ範囲またはブランドを選択して結果を絞り込むことができます。
設定したページで、条件と結果を処理する 3 つのユーザー コントロールを読み込みます。Control1
すべての基本的な検索条件 (業界、地域、状態など)control2
があり、からの結果をドリルダウンするためのフィルターがありますcontrol1
。Control3
コントロール 1 の条件に基づいてクライアントを表示します (つまり、コントロール 1 がイベントを発生させてcontrol2
聞き取りcontrol3
、両方ともコントロール 1 に基づいて結果を表示します)。ここで基準を選択し、結果を聞いて表示できるcontrol2
イベントを起動します。control3
これはすべて機能しますが、私が抱えている問題は、コントロールcontrol2
が動的に構築され、イベントが発生するcontrol1
と->control2
イベントを発生させるためにポストバックされ、コントロールができないため、control3
すべての動的コントロールが失われることです。コントロール 1 のカスタム イベントから渡された値が存在しなくなったため、でcontrol2
再作成されます。fromのカスタム イベントに渡された値を保存する、またはポストバック時に値を再渡して取得し、動的コントロールを再作成するための最良の方法は何ですか?Page_Init
control2
control1
control2
control1
control1
control2
control2
注: セッションを使用してみましたが、最初の検索後に control1 から値を再割り当てするのに問題がありました。それらが機能しない理由は、control1 の設定方法が原因であり、動的コントロールの作成がcontrol2
セッション値の取得をスキップしているためだと思います。
(できれば)役立つ回答をお寄せいただき、ありがとうございます。
更新
'control2' がポストバックされたときに 'control2' の動的コントロールが再作成されなかった理由は、実行時にデフォルト ページにユーザー コントロールをロードしていた方法であることが判明しました。私のデフォルトページは、「page_init」ではなく「page_load」にユーザーコントロールをロードしました(他のすべてのページと同様に、ユーザーコントロールのロードを「page_init」に移動するのを忘れていたに違いありません)。切り替えが行われ、動的コントロールがポストバックで再作成されます。
コードを「page_load」から「page_init」に移動した後に発生した唯一の問題は、「チェックボックス」コントロールをチェックしたにもかかわらず、ポストバック時にチェックが外されることでした。いくつかのセッション変数を使用して、これを克服することができました。