- - PR -
C#.NETでページ情報を保持したい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-10-02 10:20
お世話になります。
C#.NETでWebアプリケーションの開発を行っております。 今回、以下の機能を作成することになり、ご意見を伺いたく投稿させて頂きました。 機能) 画面に大量なデータを表示する際、1〜1000件などの単位に区切って表示する。 背景) このような画面遷移があるとします。 ・検索画面 − ページA − ページB − ページC − ページD ・検索画面 − ページB − ページC − ページD ・検索画面 − ページA − ページB − ページD − ページE 検索画面からは、条件によりページAかページBへ遷移する。 ページAからはページBへ遷移する。 ページBからは、条件によりページCかページDへ遷移する。 ページCからはページDへ遷移する。 ページDは、条件によってページEへ遷移可能である。 ※どの画面においても、遷移元画面に戻ることは可能。 ※全画面、1〜1000件などの分割表示対応する。 ページAにおいて、1〜1000件などの単位に区切って表示する処理は出来ております。 しかし、ページAからページBへ遷移し、再びページAへ戻った場合の処理を作成していない為、 デフォルト表示である、1〜1000件のデータが表示されます。 問題) 単純にページA − ページBだけの話であれば、ページAで表示している値を取得し、 ページBからページAへ遷移する際に再取得すれば対応できます。 しかし、上記例の通り、全ての画面(ページA〜ページE)にページの分割表示を組み込む 必要があり、どのようにページの表示値を取得すべきか悩んでおります。 ページAからページD(E)まで進み、ページAまで戻ったとしても、ページAの表示値を保持したいと 考えております。 私が検討している方法として、以下の二点を検討しております。 1)現在、検索条件は検索条件格納クラスで管理しているのですが、 そこにページA〜ページEまでのページ表示値格納変数を作成し、そこに値を記録する。 2)ページA〜ページEまで、画面固有のセッションキーを作成し、そこにページ表示値を記録する。 皆様でしたら、どちらを選ばれますか? また、他にも方法がありましたら、教えて頂けるとうれしいです。 開発環境:VS.NET2002 言語:C#.NET .NET Framework:1.0 OS:WindowsXPSP2 漠然とした質問ではございますが、よろしくお願い致します。 [ メッセージ編集済み 編集者: miyavi 編集日時 2007-10-02 10:24 ] | ||||
|
投稿日時: 2007-10-02 16:06
というかポストバックの度に失われるはずの「検索条件格納クラス」をどこに保持しているのですか。 | ||||
|
投稿日時: 2007-10-02 16:50
お返事ありがとうございます。
条件クラスもセッションに格納しています。 私も2が良いかなと考えておりますが、もっと良い方法がないか検討しております。 動的にページの管理が出来ればよいのですが。 | ||||
|
投稿日時: 2007-10-02 18:07
...検索画面を残したまま他のページを表示する。
| ||||
|
投稿日時: 2007-10-02 18:26
| ||||
|
投稿日時: 2007-10-02 18:44
GoogleみたいにURLのコピペで表示したいということですか? であれば、各ページに検索条件とページ番号のクエリーストリング渡しする方法になります。 ページ番号程度であれば渡せると思いますが、検索条件は項目の量次第でしょうか。 | ||||
|
投稿日時: 2007-10-03 20:13
お返事ありがとう御座います。
説明が不十分でした。 動的にページを管理するということは、ページが記録する表示値の数を意識せずに 作成出来ないだろうか、という意味です。 例えば、今回の例では、検索画面からページAに行くケースと、ページBに行くケースがあります。 その後、ページCに行った場合、ページCでは ・ページAの表示値とページBの表示値 ・ページBの表示値 のいずれかの値を持つ事になります。 ページEの場合を考えますと、保持するページの表示値は、かなりのケースが考えられます。 このようなケースでも、特にページ側では特別な処理を行わなくてもページの管理が出来る方法があれば良いのですが・・。 イメージとしては、ページCの処理とページEの処理が同じになるような感じです。 [ メッセージ編集済み 編集者: miyavi 編集日時 2007-10-03 20:14 ] | ||||
|
投稿日時: 2007-10-04 09:34
考え方として、ページAが現在何ページ目を表示させているかは、あくまでページAだけが知っていれば良く、本来ページCに持たせるべきではないと思います。 しかし、スコープがページ毎に限定されたセッション変数があれば便利なのですが、そんなものはなく。。。 というわけで、こういう時、当方は次のような実装をします。 1.セッション変数マネージャを開発する。各ページからのみアクセス可能なセッション変数の操作を可能とする。複数ページ間でアクセス可能な仕組みも実装する。 2.Session オブジェクトへの直接アクセスは禁止(※)し、セッション変数を扱う場合には、必ずセッション変数マネージャ経由でアクセスするよう義務付ける。 3.子ページに遷移する直前に、セッション変数マネージャを用いて現ページの必要値の保存を行う。 4.子ページから復帰した場合には、セッション変数マネージャから現ページの保存値を取り出して画面再描画を行うように、親ページを実装する。 ※コーディングルール的に禁止、というのがちょっと苦しい逃げですが。。。 あと、場合によっては、セッション変数ではなくワークファイルとして保存することもあるので、状態保存・復元管理クラスを作ってその中でセッション変数マネージャにアクセスしたりもしています。 色々工夫の仕方はあると思う。 |