- PR -

ASP.NETでViewState情報を画面に復元する方法について

1
投稿者投稿内容
TSUYOSHI
常連さん
会議室デビュー日: 2004/09/02
投稿数: 32
投稿日時: 2008-06-04 13:42
セッションなどに保存しておいたViewStateの情報を画面に復元する方法を探しています。

・環境
VS2005
ASP.NET 2.0

用途としては、以下のようなことを想定しています。
画面Aから画面Bへ遷移する時に、ViewState情報をセッション等に保存してから画面Bへ遷移する
画面Bで操作を終え画面Aへ戻る時に、セッション等に保存しておいたViewState情報を画面Aに復元する。

方法としてはViewStateにこだわっているのではなく、画面情報を復元する時に共通処理のみで対応できるように出来ればいいなと考えています。
また、画面への復元方法はViewStateの情報から個別に値を取り出して設定するのではなく、ViewStateの情報を一括でしたいと考えています。(ViewState.restore()の様な感じで)
ただViewStateで画面情報を復元する方法は、見当たりませんでしたので今回質問させて頂く事にさせていただきました。

何かいい方法をご存知の方がいらっしゃれば、ご教授願います。
よろしくお願いします。



[ メッセージ編集済み 編集者: TSUYOSHI 編集日時 2008-06-04 13:43 ]

[ メッセージ編集済み 編集者: TSUYOSHI 編集日時 2008-06-04 13:50 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-06-04 18:09
危ないですね。
ViewState は、ページ オブジェクト(というわけではないが、便宜上、そうしておく)をバイナリ シリアル化して、Base64 エンコードしたものだったと思います(デフォルトでは)。
あるいは、簡易な改変チェックぐらいはあったかも?

ページ のイベント遷移を調べれば、いつ ViewState が作られるかわかります。また、そのタイミングでなければなりません。そのイベントに割り込んで、どこか別の場所に保存することは可能です。
しかし、それを復元できるかなぁ?
出来るとすれば、同じタイミングで、以前保存した情報に差し替え、すぐにポストバックさせる。このポストバックは何もせずにクライアントに返す。
ってところかな?
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2008-06-04 18:20
LoadPageStateFromPersistenceMediumとSavePageStateToPersistenceMedium
をoverrideすれば可能っぽいです。


@IT:.NETエンタープライズWebアプリケーション開発技術大全 Webアプリケーションの状態管理
http://www.atmarkit.co.jp/fdotnet/entwebapp/entwebapp03/entwebapp03_02.html
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-06-04 18:46
ふむ。
復元だけだから、LoadPageStateFromPersistenceMediumのほうのoverrideでいけますかね。

ただ、問題はViewStateの復元はPostBack時にしか行われないことですね。
画面Bから画面Aに戻るときにPostBackとして扱わせることができるかどうかが問題でしょうね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-06-04 20:00
他のページから POST で移動してくればいいのかな?

いったん他のページへ移るということなので、保存側も、ページ内の hidden 意外に保存するように、手を加える必要があるかと。

でも、余計に面倒なことになりそう。素直に画面ないの必要なものだけ退避/復元する方が、かえって簡単なように思う。
TSUYOSHI
常連さん
会議室デビュー日: 2004/09/02
投稿数: 32
投稿日時: 2008-06-05 09:47
みなさん、ご回答をありがとうございます。

まず、LoadPageStateFromPersistenceMediumのoverrideなら行けそうかなと思い試してみました。
そしたら、どっとねっとふぁんさんの言うとおり、単純に行うと初回アクセス時はPOSTBACKとして扱われないためLoadPageStateFromPersistenceMediumが呼び出されませんでした。

画面遷移時にPOSTすることで動くかどうかなど、
もう少し色々と試してみようかなと思います。

>Jittaさん
>でも、余計に面倒なことになりそう。素直に画面ないの必要なものだけ退避/復元する方が、かえって簡単なように思う。

確かに、面倒な事になりそうな気もしますね。
できるかどうか試してみてから、使うかどうかを決めたいと思っています。
正直、変に作り込んで怪しい動きをされるのも困るなっていう不安もあります。

また、他にいい方法があればご教授願いたいです。
1

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