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で質問しましょう!
似たような質問が見つかりました
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- 宇宙科学・天文学・天気 銀河のハビタブルゾーンを確率的セルオートマトンという数値的にシミュレーションした結果、「群島」の様な 2 2023/06/06 23:10
- iPhone(アイフォーン) iPhone13 Pro Maxが異常に遅い理由? 3 2022/09/17 20:30
- HTML・CSS htmlで画面遷移させたい 1 2022/10/28 18:19
- au(KDDI) 特定の画面を見るとスマホが固まります ご覧頂き有難うございます。 特定のページを見るとスマホが固まり 1 2023/08/21 19:29
- iPhone(アイフォーン) iPhoneの機種変更するときのデータの引き継ぎについて 3 2022/07/06 18:29
- 日本語 「~人」と「~名」の使い分け 2 2022/06/02 11:59
- ポイントサービス・マイル ポンタポイントの登録の仕方を教えてください 1 2023/01/19 22:56
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- iPhone(アイフォーン) 【iPhone SIMフリー】ドコモ契約者です。「機種変更を自分でする方法」について、初歩的な質問で 10 2023/08/25 06:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ASPで画面間のパラメタ受け渡し
-
オートマトンNFAからDFAへの変換
-
画面遷移が不正ですと表示されます
-
c# 文字列の最後から1文字削除...
-
Accessの画面更新を一時的に停...
-
DataGridViewのチェックボック...
-
formでのtarget="_blank"2回目
-
ブラウザの×(閉じる)ボタンの...
-
Page_Load時にボタンクリックイ...
-
VC++ MFC CListCtrlで、ボタン...
-
DVD-Rの「セッションを閉じる」...
-
ACCESS2010 WEBブラウザーコン...
-
aspxをhtmlに変換する方法について
-
ページングが大量発生する原因...
-
HTMLボタンの文字色を変え...
-
Media Player のスクリーンショ...
-
グリッドビューでのチェックボ...
-
今更、VBAでRPA、キーボード操...
-
青い枠のみのHTML
-
同じソリューション内の別のプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTTPリクエストヘッダーの設定...
-
画面遷移が不正ですと表示されます
-
ASPで画面間のパラメタ受け渡し
-
【ASP.NET】ページ遷移してもGr...
-
エクセルVBA 別のブックのユ...
-
VB.NET 画面遷移
-
スマホで、左右にスワイプして...
-
request.QueryStringについて
-
セッション変数への値の代入方...
-
ASP.NET による画面遷移で質問...
-
Spreadのデータを別画面に引き渡す
-
C#でテキストボックスとスクロ...
-
Request Header の追加
-
server.transferで別のサイトへ
-
違うサイトに移動した時にcooki...
-
googleカスタム検索を導入する...
-
Access2013 VBA 複数の画面の遷移
-
VBAで画面遷移時のパラメータに...
-
POSTだけして、ページの移動を...
-
ページ遷移方法について
おすすめ情報