新しいルーティング機能を使用して、asp.net 4.5 アプリケーションを作成しています。アイテムに関する情報を表示するページがあります。イベントではPage_Load
、ルート データ (アイテム ID) とユーザーのアクセス許可を確認し、何かが正しくない場合 (たとえば、ID が削除されたアイテムの場合) を使用Response.RedirectToRoute
して梱包を送り、すぐにホームページに戻ります。GO を通過しないでください。$200 を収集しないでください。
削除されたアイテムにアクセスしようとすると、ホームページの代わりにエラーページが表示されるまで、これは完全に理にかなっています. 私はいくつかの掘り下げを行い、RedirectToRoute
(標準的な方法とは異なりRedirect
)使用した後でもページコードの残りの部分が実行され続けることを発見しました.必要なデータが存在しない場合。
私はもう少しSOマイニングを行い、信じられないほどの悪を発見しましたResponse.End()
. それは私が必要とすることをしますが、MSDNページResponse.End
でさえ、それは古代の呪われた言語のろくでなしの子供であり、日の目を見るのにふさわしくないことを教えてくれます。主な反論は、Response.End が例外をスローするという事実のようであり、それはパフォーマンスにとって悪いことです。私は最も経験豊富な開発者ではないので、この問題を完全には理解していませんが、例外をスローする方が Web ページ全体を読み込むよりもコストがかかるとは思えません。特にほとんどのページでは何らかの有効性チェックが必要なため、回避策は非常に単純なタスクに対してかなり複雑で過剰に思えます。
この状況で私は何をすべきですか?私の無礼を使っResponse.End
て許しを請う?いくつかの醜い回避策をまとめますか?それとも、そもそも問題に対する私の見方はすべて間違っていますか? 私は本当に知りたいです。
更新: もう少し考えてみたところ、この問題について間違った見方をしているのではないかと思います。おそらく、すぐにリダイレクトすることは、ユーザー エクスペリエンスにとって最善の対応ではありません。すべてのコントロールをパネルにラップして、このようなものを使用したほうがよいでしょうか?
Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
'Validation Code
If notValid Then
ControlsPanel.Visible = false
ErrorPanel.Visible = true
End If
End Sub