- PR -

[ASP.NET2.0]メイン画面から選択画面への画面遷移方法について

投稿者投稿内容
Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2006-06-27 16:28
引用:

ともゆきさんの書き込み (2006-06-27 16:18) より:

WEBフォームそのものをセッションに格納することはできますでしょうか?




いえ、もうホントに力技です

フォームそのものをセッションに格納できるかわからないので、項目の内容のみ
セッションに保存してます。

項目のほとんどがテキストなので項目名(ID)には連番付けて、ループで回して
FindControlを使用し値をすべて配列に入れ,その配列をセッションへ格納

こんな感じです orz

# ちなみにFindControlを使用するのは、後で項目が増えても対応できるかな
# と考えてです ← 設計が甘い証拠

[ メッセージ編集済み 編集者: Katze 編集日時 2006-06-27 16:31 ]
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-06-27 16:36
良いか悪いかは別として、PageをSessionに格納することはできます。

コード:
//
// Sessionに保存
//
this.Session["Page"] = this.Page;

//
// 前の状態を復元
//
if (this.Session["Page"] != null && this.IsPostBack == false)
{
	WebForm1 page = (WebForm1)this.Session["Page"];
	this.TextBox1.Text = page.TextBox1.Text;
	this.TextBox2.Text = page.TextBox2.Text;
	this.TextBox3.Text = page.TextBox3.Text;
	
}

todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-06-27 17:30
引用:

いろいろ調べているとASP.NET2.0からMultiViewコントロールを
使用して一つのWEBフォームに画面A/Bを配置すれば可能で
あることが分かりました。

しかし、画面Bは他の画面(例えば画面C)からも遷移する
仕様になる可能性もあるので、別のWEBフォームにしたいんです。



案1

別のWebフォームにせずにクエリーで区別するとか。

WebForm1.aspx?Page=A
WebForm1.aspx?Page=B

案2

画面Aと画面Bをユーザーコントロールにするとか。

MultiViewと画面Aと画面BのWebフォームを作る。
画面BだけのWebフォームを作る。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-06-27 17:36
引用:

burton999さんの書き込み (2006-06-27 16:36) より:
良いか悪いかは別として、PageをSessionに格納することはできます。


メモリに優しくなさそうですねw
必要なデータだけ力技で抜き出した場合と、
メモリ使用量はどれくらい変わってくるもんなんでしょう?

引用:

Katzeさんの書き込み (2006-06-27 16:28) より:
いえ、もうホントに力技です

フォームそのものをセッションに格納できるかわからないので、項目の内容のみ
セッションに保存してます。


もし私がそのような局面に直面したらこうするだろうな、という案を。

まず、Sessionに個別にデータを格納すると破棄が大変なので、
Hashtableを一個かまします。

Hashtableに変数名をキーに、値を入れていく。
値は例えばTextBoxならTextプロパティだし、
CheckBoxならCheckedプロパ(ry
要するに復元に必要な最低限の情報です。

最後にHashtableを画面のクラス名をキーにSessionに格納する。
復元は全く逆の手順で行い、最後にSessionにしまっといたHashtableをRemove。

そしてこれらの処理(Sessionへの保存とSessionからの復元)を行うソースコードを、
ソースファイルの「Web フォーム デザイナで生成されたコード」の中の変数宣言部を解析して
自動生成してくれるWindowsアプリケーションを作ります。

#結果的には力技なんですけどね(^^;
#過程でちょっとでも楽したいとw
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-06-27 18:41
引用:

Katzeさんの書き込み(2006-06-27 15:38)より:
(略)


 セッションは恐いので & 再接続時にも復元したいので、
アプリケーション データ用ディレクトリに、ユーザ毎にディレクトリを作って、
そこにシリアル化した内容を保存しています。

 データを、表示するモノから分けておくと(MVC とか Document/View とか)、こういうときに便利。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-06-27 19:46
画面Aのどのような情報を保持しておきたいのでしょうか
どの行を選んだのかとか、検索条件ぐらいだったら
SessionやRequestで引き渡してもいいと思うのですが
未記入
ベテラン
会議室デビュー日: 2003/06/26
投稿数: 76
投稿日時: 2006-06-28 00:42
・showDialogで画面Bを開く。大きな画面は作れないな〜。

・画面Aを最小化する。フォーカスが移っても、画面Bが表示されている限り最小化する!...あ〜っ、怒られる、絶対に怒られる!

・画面Aの入力項目、ボタンなどをすべてDisableして画面Bを表示する。画面Bが閉じるときに画面AのDisableを解除する。

きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2006-07-02 13:08
引用:

todoさんの書き込み (2006-06-27 17:30) より:

案2

画面Aと画面Bをユーザーコントロールにするとか。



に 3 万リラ。

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