- PR -

C#.NETでページ情報を保持したい

投稿者投稿内容
miyavi
常連さん
会議室デビュー日: 2006/12/07
投稿数: 27
投稿日時: 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 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-10-02 16:06
引用:
1)現在、検索条件は検索条件格納クラスで管理しているのですが、
 そこにページA〜ページEまでのページ表示値格納変数を作成し、そこに値を記録する。
 
 2)ページA〜ページEまで、画面固有のセッションキーを作成し、そこにページ表示値を記録する。

この2択なのなら私は2かな。
というかポストバックの度に失われるはずの「検索条件格納クラス」をどこに保持しているのですか。
miyavi
常連さん
会議室デビュー日: 2006/12/07
投稿数: 27
投稿日時: 2007-10-02 16:50
お返事ありがとうございます。

引用:

というかポストバックの度に失われるはずの「検索条件格納クラス」をどこに保持しているのですか。


条件クラスもセッションに格納しています。

私も2が良いかなと考えておりますが、もっと良い方法がないか検討しております。

動的にページの管理が出来ればよいのですが。
未記入
常連さん
会議室デビュー日: 2007/02/21
投稿数: 29
投稿日時: 2007-10-02 18:07
...検索画面を残したまま他のページを表示する。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-10-02 18:26
引用:
条件クラスもセッションに格納しています。

あ、だったらどうせ同じことなので私なら「検索条件格納クラス」に格納しちゃうかも。
tkrn
ベテラン
会議室デビュー日: 2005/10/25
投稿数: 61
投稿日時: 2007-10-02 18:44
引用:

動的にページの管理が出来ればよいのですが。



GoogleみたいにURLのコピペで表示したいということですか?
であれば、各ページに検索条件とページ番号のクエリーストリング渡しする方法になります。
ページ番号程度であれば渡せると思いますが、検索条件は項目の量次第でしょうか。
miyavi
常連さん
会議室デビュー日: 2006/12/07
投稿数: 27
投稿日時: 2007-10-03 20:13
お返事ありがとう御座います。

引用:

GoogleみたいにURLのコピペで表示したいということですか?
であれば、各ページに検索条件とページ番号のクエリーストリング渡しする方法になります。
ページ番号程度であれば渡せると思いますが、検索条件は項目の量次第でしょうか。


説明が不十分でした。

動的にページを管理するということは、ページが記録する表示値の数を意識せずに
作成出来ないだろうか、という意味です。

例えば、今回の例では、検索画面からページAに行くケースと、ページBに行くケースがあります。
その後、ページCに行った場合、ページCでは
 ・ページAの表示値とページBの表示値
 ・ページBの表示値
のいずれかの値を持つ事になります。

ページEの場合を考えますと、保持するページの表示値は、かなりのケースが考えられます。

このようなケースでも、特にページ側では特別な処理を行わなくてもページの管理が出来る方法があれば良いのですが・・。

イメージとしては、ページCの処理とページEの処理が同じになるような感じです。

[ メッセージ編集済み 編集者: miyavi 編集日時 2007-10-03 20:14 ]
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-10-04 09:34
引用:

例えば、今回の例では、検索画面からページAに行くケースと、ページBに行くケースがあります。
その後、ページCに行った場合、ページCでは
 ・ページAの表示値とページBの表示値
 ・ページBの表示値
のいずれかの値を持つ事になります。


考え方として、ページAが現在何ページ目を表示させているかは、あくまでページAだけが知っていれば良く、本来ページCに持たせるべきではないと思います。
しかし、スコープがページ毎に限定されたセッション変数があれば便利なのですが、そんなものはなく。。。

というわけで、こういう時、当方は次のような実装をします。

1.セッション変数マネージャを開発する。各ページからのみアクセス可能なセッション変数の操作を可能とする。複数ページ間でアクセス可能な仕組みも実装する。
2.Session オブジェクトへの直接アクセスは禁止(※)し、セッション変数を扱う場合には、必ずセッション変数マネージャ経由でアクセスするよう義務付ける。
3.子ページに遷移する直前に、セッション変数マネージャを用いて現ページの必要値の保存を行う。
4.子ページから復帰した場合には、セッション変数マネージャから現ページの保存値を取り出して画面再描画を行うように、親ページを実装する。

※コーディングルール的に禁止、というのがちょっと苦しい逃げですが。。。

あと、場合によっては、セッション変数ではなくワークファイルとして保存することもあるので、状態保存・復元管理クラスを作ってその中でセッション変数マネージャにアクセスしたりもしています。

色々工夫の仕方はあると思う。

スキルアップ/キャリアアップ(JOB@IT)