
mitsu1112と申します。どうぞよろしくお願いします。
現在、ASP.NET2.0にて開発を行っていますが、
何分プログラミング自体初心者であるため、
わからないことだらけです。
ログイン機能を備えた社員スケジュールを
管理するサーバを構築したいのですが、
私に与えられた任務は、
「画面の遷移方法について調べ上げ、こういったときに
こういった方法を使って遷移する」ということを判断する
というものです。
2.0で行える遷移方法は4つあると認識し、
それぞれの特徴もおおよそとらえていると思いますが、
どの場面でどの方法を使うかという明確な使い分けが
まだ自分にはわかりかねます。
そこで質問したいのが、こういった使い分けは
どうしたらよいのか、そして自分で勉強するなら
どういったところを調べたらよいでしょうか。
長くなってすいません。ご回答よろしくお願いします。
No.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/ty …
ご回答に対しての返事が遅れてしまい申し訳ありません。
本日、話し合いの結果、Redirectを使って画面遷移を行うことになりました。せっかくご意見していただいたのに、私の理解不足からTransfer独特のメリットやCross-Page Postingのデメリットなどをうまく説明出来ませんでした。Xavalさんからいただいたご回答を参考に、遷移について更に理解を深めたいと思います。
次の課題としては値の受け渡しや状態の管理といったものが考えられます。
もしよろしければ、このようなことに関してもまた適切なご回答をいただけたら幸いと思います。
No.1
- 回答日時:
画面の遷移はフレームワークを使って1種類に統一したほうがいいと思います。
簡単にいえば、Pageクラスを継承したベースページにそれを実装してもいいです。
種類ですが、クロスポストバックは意外と変更に強くないですし(実装によってデータフローが複雑になることがある)、Server.Transferはコマンドパターンによる実装が相性が合います(社員スケジュール程度ではつかいません)。
ここはResponse.Redirect + ハッシュテーブルの引数をセッションを介して持ちまわる、一般的な方法でいいでしょう。
ベースページクラス内で、パラメータ付の遷移を行ったときに、遷移イベントが発生するようにしたら、柔軟に実装できます。
たとえば
Page.PageTransfer("xxx.aspx",hash);
が実行されると、遷移先ページでは
void OnPageTransfered(TransferEventArgs e){ .. }
が発生するとか。
引数のインスタンスは都度、破棄してください。
巨大なデータが増え続けると厄介です。
ご回答ありがとうございます。
私の知識不足のために重ねてお聞きしたいのですが、
ご回答いただいたRedirectを使って遷移する方法を
とったときのセキュリティの問題はどうなるのでしょうか。
セキュリティと言っても、かなり漠然としていますが、
URL直接指定による想定外のページ遷移など。ちなみに、
社員データはデータベースに保存と考えています。
Cross-Page Postingは実装し、もし何か変更箇所があったときに融通が利かず、データーフローが発生する場合がある。
という認識でよろしいでしょうか。
Server.Transferを使わない理由はよくわかりません。
そして、Redirectですが、もう少し学習して、なぜこの方法を選択したのかを自分なりにきちんと言えるようになりたいと思っています。それには何か参考になるサイトなどはご存じないでしょうか。
重ね重ね申し訳ありませんが、ご回答いただけたらと思います。
どうぞよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルに張り付けた写真のフ...
-
SJISで、全角文字Aの文字コード...
-
VBAでPDFを作成する際、同じ名...
-
【VB.NET】App.configにファイ...
-
Excelにて、シート間で、データ...
-
スイッチが二台あり、別々のア...
-
キヤノン アソビカメラ iNSPiC ...
-
phpのファイルがブラウザで開か...
-
aspxをhtmlに変換する方法について
-
VB.NET Excelを読み込んでDataT...
-
Windows10にデュアルブートでXP...
-
VBA 複数のテキストボックスと...
-
Windowsで複数のファイルを同じ...
-
高校1年生情報の問題について。
-
C#からvbsを実行したい
-
vba 空のデータをSplitする時の...
-
ffftpでファイル取得が0バイト...
-
お世話になります。 Windows Up...
-
Excelでボタン(フォームコント...
-
SPO2測定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面遷移が不正ですと表示されます
-
HTTPリクエストヘッダーの設定...
-
ASPで画面間のパラメタ受け渡し
-
【ASP.NET】ページ遷移してもGr...
-
ASP.NET による画面遷移で質問...
-
自動ページ遷移について
-
VB.NET 画面遷移
-
Spreadのデータを別画面に引き渡す
-
オートマトンNFAからDFAへの変換
-
VB.NETのWebアプリケーション開...
-
request.QueryStringについて
-
C#でテキストボックスとスクロ...
-
"ビジョ"というソフトウェア
-
ページ遷移方法について
-
シングルサインオンの方法
-
スマホで、左右にスワイプして...
-
性の悩み「カテゴリ」について
-
違うサイトに移動した時にcooki...
-
javascriptの質問です
-
アプリの不具合?
おすすめ情報