- ベストアンサー
ページ遷移方法について
- ASP.NET2.0における画面遷移方法について、使い分けや勉強方法を知りたい。
- ログイン機能を備えた社員スケジュールを管理するサーバを構築するにあたり、ASP.NET2.0で利用可能な4つの遷移方法とその特徴を理解しているが、具体的な使い分けがわからない。
- 画面遷移方法の使い分けについてのアドバイスと、自己学習のために参考になる情報源を教えてほしい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Redirectで想定外のページに行くことは考えにくいです。 Redirectの行き先をクライアントから任意入力させれば別ですが。 Cross-Page Postingは実装の仕方によります。 とくに、一つのページに対して複数ページからのデータ引き継ぎを伴う遷移があった場合、データの引き継ぎ方を間違えると大変になります。 データフローが煩雑になるっていうのが悪かったかな?ワークフロー上のデータ引き継ぎ部分が煩雑になります。入力値の検証が混じるととくに。 内部挙動が複雑なので、通常の業務アプリケーションでは使われません。ポストしたときのエラー処理がない場合もしくはブラウザ側でのみ入力チェックが完了する場合は、使用してもかまいません。 また、一つのページに複数の遷移元がない場合がいいでしょう。 Server.Transferを使うと、遷移先ページのURLをブラウザが認識しません。リンクはどうなりますか? と、いうことは、階層構造にかかわらず、ブラウザがアクセスするページを一元化する必要があるということです。つまり、フロントコントローラとよばれる、すべてのページのアクセスで最初に必ず通る共通の部分を実装する場合と相性がいいのです。大規模なサイト向けです。 ※ Transferでこんな引き継ぎもあるよ。こまってもこれで何とかなります。 (1)value = Request.Form["TextBox1"]; // 強引にPOSTの値をとる (2)this.Context.Items["Name1"] = this.TextBox1.Text; // コンテキストをつかう。 value = (string)this.Context["Name1"]; ※Transferはアクセス制御をかけたページにも行くことができるようになる場合があるので注意。 ページ数が一桁程度なら、どの方法をとっても大丈夫です。 困ってもすぐに手入れできるからです。 サンプルページを二つ作って、実感してみるのが先決かもしれません。 こういうドキュメントはなかなか見ません。だから開発チームによってまったく方法が違うと思います。いちばんたくさん見たのは、Hashtableによる受け渡し+RedirectもしくはTransferです。 とりあえずエンタープライズのWEBページ設計の指針になるページを書いておきます。 参考: http://www.microsoft.com/japan/msdn/practices/type/Patterns/enterprise/espwebpresentationpatterns.aspx
その他の回答 (1)
- Xaval
- ベストアンサー率58% (61/105)
画面の遷移はフレームワークを使って1種類に統一したほうがいいと思います。 簡単にいえば、Pageクラスを継承したベースページにそれを実装してもいいです。 種類ですが、クロスポストバックは意外と変更に強くないですし(実装によってデータフローが複雑になることがある)、Server.Transferはコマンドパターンによる実装が相性が合います(社員スケジュール程度ではつかいません)。 ここはResponse.Redirect + ハッシュテーブルの引数をセッションを介して持ちまわる、一般的な方法でいいでしょう。 ベースページクラス内で、パラメータ付の遷移を行ったときに、遷移イベントが発生するようにしたら、柔軟に実装できます。 たとえば Page.PageTransfer("xxx.aspx",hash); が実行されると、遷移先ページでは void OnPageTransfered(TransferEventArgs e){ .. } が発生するとか。 引数のインスタンスは都度、破棄してください。 巨大なデータが増え続けると厄介です。
お礼
ご回答ありがとうございます。 私の知識不足のために重ねてお聞きしたいのですが、 ご回答いただいたRedirectを使って遷移する方法を とったときのセキュリティの問題はどうなるのでしょうか。 セキュリティと言っても、かなり漠然としていますが、 URL直接指定による想定外のページ遷移など。ちなみに、 社員データはデータベースに保存と考えています。 Cross-Page Postingは実装し、もし何か変更箇所があったときに融通が利かず、データーフローが発生する場合がある。 という認識でよろしいでしょうか。 Server.Transferを使わない理由はよくわかりません。 そして、Redirectですが、もう少し学習して、なぜこの方法を選択したのかを自分なりにきちんと言えるようになりたいと思っています。それには何か参考になるサイトなどはご存じないでしょうか。 重ね重ね申し訳ありませんが、ご回答いただけたらと思います。 どうぞよろしくお願いします。
お礼
ご回答に対しての返事が遅れてしまい申し訳ありません。 本日、話し合いの結果、Redirectを使って画面遷移を行うことになりました。せっかくご意見していただいたのに、私の理解不足からTransfer独特のメリットやCross-Page Postingのデメリットなどをうまく説明出来ませんでした。Xavalさんからいただいたご回答を参考に、遷移について更に理解を深めたいと思います。 次の課題としては値の受け渡しや状態の管理といったものが考えられます。 もしよろしければ、このようなことに関してもまた適切なご回答をいただけたら幸いと思います。