C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 画面遷移先でエラー時に画面遷移元に戻りたい


(過去ログ 118 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■69250 / inTopicNo.1)  画面遷移先でエラー時に画面遷移元に戻りたい
  
□投稿者/ 高橋 (3回)-(2013/12/11(Wed) 21:31:09)

分類:[ASP.NET (VB)] 

はじめまして、高橋と申します。
VISUAL STUSIO 2010 ASP.NET(VB.NET)で勉強をしております。

画面遷移についてお聞きしたくて質問させていただきました。

A画面からB画面にResponse.Redirectで画面遷移しています。
画面遷移自体はうまくいくのですが、B画面のPage_Loadでエラーがあった場合、
A画面に戻りたいのですが、その場合どのように処理するのが正しいのでしょうか?
もう一度B画面からA画面にResponse.Redirectで画面遷移するしか方法がないのでしょうか?

よろしくお願いいたします。
引用返信 編集キー/
■69256 / inTopicNo.2)  Re[1]: 画面遷移先でエラー時に画面遷移元に戻りたい
□投稿者/ an (14回)-(2013/12/12(Thu) 11:58:29)
No69250 (高橋 さん) に返信

何が正しいのかはよくわかりませんが、返信がないようなので・・・。


> 画面遷移自体はうまくいくのですが、B画面のPage_Loadでエラーがあった場合、
> A画面に戻りたいのですが、その場合どのように処理するのが正しいのでしょうか?

なぜ「正しいのか」という疑問が発生したのでしょうか?

> もう一度B画面からA画面にResponse.Redirectで画面遷移するしか方法がないのでしょうか?

試していませんが、これで正常に動作しないのでしょうか?
また、正常に動作はするが、何か問題があるのでしょうか?(制作する上で手間が多い等)



ちなみに昔にやった方法を参考まで
(基本的にはポストバックしてからResponse.Redirectで画面遷移をしていたので、
 考え方は近いかと思います。)


> 画面遷移自体はうまくいくのですが、B画面のPage_Loadでエラーがあった場合、

このエラーというのは、予期できる問題なのか、予期できない例外なのかによるのかと思います。

予期できる問題については、
基本的には遷移元画面で遷移する前に状態を確認して、問題があるようであれば、
遷移元画面にその問題に対するメッセージを表示し、そもそも遷移させませんでした。
予期できるが遷移元画面では判断が出来ないようなものについては、
遷移先の画面を表示はするが、全て使えないようにしつつ、画面上にその旨表示し、
戻るしかできないようにするとは思います。
(が、その様な例はあったかどうか記憶が定かではありません・・・。
 極力遷移元画面で判断するようにしていたので。)

予期できない例外が発生した場合は、
大抵の場合がそう簡単に復旧できるような問題ではない(設計上の不備でプログラム的にも改修が必要となる)ので、
遷移元画面に戻すのではなく、エラーページに飛ばして続けさせないようにします。
(もちろん解析用にログ等は出力します。)



個人的には何が正しいというよりは、設計(画面設計や共通設計)次第な気がしますが・・・



> もう一度B画面からA画面にResponse.Redirectで画面遷移するしか方法がないのでしょうか?

直接の回答になっておらず、全ての状況が上記の例で済むかわかりませんが、
参考になれば幸いです。

引用返信 編集キー/
■69258 / inTopicNo.3)  Re[1]: 画面遷移先でエラー時に画面遷移元に戻りたい
□投稿者/ WebSurfer (116回)-(2013/12/12(Thu) 13:06:18)
No69250 (高橋 さん) に返信
> はじめまして、高橋と申します。
> VISUAL STUSIO 2010 ASP.NET(VB.NET)で勉強をしております。
>
> 画面遷移についてお聞きしたくて質問させていただきました。
>
> A画面からB画面にResponse.Redirectで画面遷移しています。
> 画面遷移自体はうまくいくのですが、B画面のPage_Loadでエラーがあった場合、
> A画面に戻りたいのですが、その場合どのように処理するのが正しいのでしょうか?
> もう一度B画面からA画面にResponse.Redirectで画面遷移するしか方法がないのでしょうか?

そもそも考え方が間違っているような気がします。

ASP.NET Web Forms アプリでの基本は、例えば以下の通りです。

(1) ページ A でユーザーにデータを入力させる。

(2) ユーザーが入力完了後、ページ A にポストバックする。

(3) サーバー側はページ A を再ロードし、ユーザー入力を検証して DB に登録する。

(4) 上記 (3) の処置がすべて OK となったらページ B にリダイレクトさせる。

(5) 上記 (3) でユーザー入力の検証結果が NG となったり、DB サーバの障害や同時
  実行制御違反で登録できなかっら場合、エラーメッセージと共にページ B に
  差し戻す。

ページ B にリダイレクト後、ページ B で何かの問題が出てページ A に差し戻すよう
なことは想定外と言っていい(と言うか、そういうことがないように Web アプリを作
るべき)と思います。

ASP.NET に限らず、Web アプリケーション開発の基本として、Post/Redirect/Get (PRG)
パターンを使う・・・即ち、POST 要求への応答をそのまま返すのは検証結果 NG の場合
のみとし、検証結果 OK の場合は、例え同じページを表示するにしても、リダイレクト
してブラウザに GET 要求させるのがよいそうです。

Post/Redirect/Get (PRG) については以下のページを見てください。

Post/Redirect/Get
http://en.wikipedia.org/wiki/Post/Redirect/Get
引用返信 編集キー/
■69259 / inTopicNo.4)  Re[2]: 画面遷移先でエラー時に画面遷移元に戻りたい
□投稿者/ WebSurfer (117回)-(2013/12/12(Thu) 13:11:32)
> (5) 上記 (3) でユーザー入力の検証結果が NG となったり、DB サーバの障害や同時
>   実行制御違反で登録できなかっら場合、エラーメッセージと共にページ B に
>   差し戻す。

すみません、(5) に誤記がありました。差し戻す先は B ではなくて A です。

以下の通り訂正します。

(5) 上記 (3) でユーザー入力の検証結果が NG となったり、DB サーバの障害や同時
  実行制御違反で登録できなかった場合、エラーメッセージと共にページ A に
  差し戻す。

引用返信 編集キー/
■69262 / inTopicNo.5)  Re[3]: 画面遷移先でエラー時に画面遷移元に戻りたい
□投稿者/ WebSurfer (119回)-(2013/12/12(Thu) 18:02:35)
追伸です。

どうしても画面 B から画面 A に戻りたいという理由があるなら、画面 A, B を同一 Page
の別 Panel に実装し、それを切り替えることをお勧めします。

それを簡単に実現できるよう、MultiView とか Wizard というサーバーコントロールも用意
されています。

MultiView クラス
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.multiview.aspx

Wizard クラス
http://msdn.microsoft.com/ja-jp/library/3t61838w(v=VS.100).aspx

手順に従って複数のステップでデータを収集していく場合は Wizard、順次ではなく条件に
応じて変化する手順を表示する場合は MultiView がよさそうです。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -