• ベストアンサー

ASP.NET による画面遷移で質問です。

はじめまして。 ASP.NETのC#で開発を行っていますが、画面遷移で困っています・・・ A画面 ⇔ B画面 ⇔ C画面 と遷移する場合と、 A画面 ⇔ C画面 へ遷移する場合があり、戻り先が操作により異なります。 その場合、遷移元の情報はどのように保持していいのでしょうか? 現在は、ページ情報(各種コントロール情報・遷移元画面名)クラスを作り、Listに格納しセッションにて保持しています。 しかしなが、使い勝手が悪く(作り方が悪いのか・・・)困っています。 一般的にはこのような画面遷移のシステムを作る際はどのように作成するものなのでしょうか?宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Xaval
  • ベストアンサー率58% (61/105)
回答No.3

>ASP.NETでのフレームワーク化 大したことではありません。 通常、汎用的でどうにでも作れるものを、一定の基準に沿うようにするだけです。 たとえば、データつきページ遷移なら、 基底クラス内メソッド PageTransfer("遷移先", (Dictionary<string.object>)持ち出しデータ) を定義、 遷移先ページで Page_Load 以外に カスタムイベント Page_Transfered(object sender, TransferEventArgs e) を発生させるようにし、  e.Parameters["xxId"] (持ち込んだパラメータ値)  e.PreviousPage (前のページ) などを参考にいろんなことをやり取りできるとか、そういった仕組みを作るだけです。 多少骨は折れますが、この程度なら3日見込めば大丈夫かと思います。

belief0831
質問者

お礼

基底クラスでフレームワーク的?な感じで実装してなんとか 上手くいきました。 ありがとうございます。

その他の回答 (2)

  • Xaval
  • ベストアンサー率58% (61/105)
回答No.2

これらはページ間でデータ関連をもったページですよね? ということは、データの持ち回りの際にはなにがしかの(セッションを利用した)ページ遷移を行っていると思います。おそらく各ページクラスが共通の基底Pageクラスを持ち、その中で実装してませんか? その辺でこの遷移元をうまく利用するように、まとめてフレームワーク化したほうがよいかと思います。 私は過去にこれに近いことをしたことがあり、モーダルページ風の遷移(別Windowは開きません)を実装して戻り先制御を行いました。 その時は通常遷移、モーダル遷移、分岐遷移(ポップアップ)などに分けた記憶があります。 仮に今回の場合、モーダル遷移(来た道と帰る道が一緒)とするわけです。 実装は、セッション内にシングルトン実装されたスタック配列に、Open,Closeっぽい動きに合わせてPush,Popするわけです。 この場合、戻り先はスタックをPopすれば出てくるので・・・・ という説明でイメージつかめますか? その時はフレームワーク化だったので、大きな作りですが、簡易にしてしまうのなら、BのページやAのページの遷移の際に、セッションに処理のモードを示す値でも入れて、Cで読みだしてください。 また、決してTransferメソッドを使って、PreviousPageをもとにしてはいけません。ページマネージャを利用したStateパターンのようなハブ&スポークな構造を利用しないと、 開発が進んでページ間のリレーションが増すごとにこの仕様は足を引っ張りますので。

belief0831
質問者

補足

そうです、基底Pageクラスで実装しています。 だいたいのイメージはつかめたのですが、ASP.NETでのフレームワークと言うのがいまいち掴めてません。

回答No.1

この説明だけですと、トラブルシューティングできるかわかりませんが、(実装がきちんとされているとして)原因としてはpostbackと非postback時の処理がきちんと分けられていない、とか? Page_Loadイベントの中の処理で、遷移先を指定する処理がありますでしょうか???

belief0831
質問者

補足

説明が不十分ですみません。 postbackの処理は分けております。 Page_Loadイベント内でのページ遷移を行う場合はあります。 URLのパラメータエラーなどで、トップに戻す処理を入れております。

関連するQ&A

専門家に質問してみよう