私は、従来のASPおよびASP.NET Webフォームでresponse.redirectを使用しました。しかし、MVC 2.0では、何か奇妙なことに遭遇しています。
いくつかの情報の読み込みと検証に役立つ複数のコントローラーメソッドで使用されるコントローラークラスにプライベートメソッドがあります。このプライベートメソッドは、問題が一般的なエラーメッセージページに発見された場合にリダイレクトするように設定されています。
私が気づいている大きな問題は、呼び出し元のコントローラークラスとページビューが、リダイレクトが実際に行われる前にレンダリングとロードを完了しようとすることです。ジェネリックエラーページが最終的に読み込まれる前に、Viewが無視する必要がある例外をスローするため、これは開発では面倒です。
前述のように、古いページのresponse.redirectに慣れているため、新しいページが読み込まれると、ページ上の後続のコードが実行されません。
MVCでのリダイレクトに関するヘルプやアドバイスは大歓迎です。
ASP.Net MVCでリダイレクトする従来のメカニズムは、RedirectResult型のオブジェクトをクライアントに返すことです。 Viewメソッドが呼び出される前にこれが行われた場合、Viewメソッドは呼び出されません。
Response.Redirectを自分で呼び出す場合、Asp.Net MVCのフロントコントローラーに代わりに実行させるのではなく、コントローラーメソッドは終了するか例外をスローするまで続行されます。
あなたの問題に対する慣用的な解決策は、プライベートメソッドがコントローラーが使用できる結果を返すようにすることです。
例えば:
public ActionResult Edit(MyEntity entity)
{
if (!IsValid()) return Redirect("/oops/");
...
return View();
}
private bool IsValid()
{
if (Nozzle==NozzleState.Closed) return false;
if (!hoseAttached) return false;
return (userRole==Role.Gardener);
}
ASP.NET MVCでは、通常、コントローラーメソッドからRedirectResult
を返すことで別のページにリダイレクトします。
例:
public ActionResult Details(int id)
{
// Attempt to get record from database
var details = dataContext.GetDetails(id);
// Does requested record exist?
if (details == null)
{
// Does not exist - display index so user can choose
return RedirectToAction("Index");
}
// Display details as usual
return View(details);
}
MVCではResponse.Redirectを使用しない
return RedirectToAction("ActionResultName", "ControllerName");
[〜#〜] why [〜#〜]に関して、MVCでResponse.Redirectを使用しない場合:
推奨され、それを使用してmvcコントローラーアクションでasp.netフォームにリダイレクトする唯一の方法
return Redirect("/page/pagename.aspx");
他の方法を使用してリダイレクトすることができます(推奨されない悪い方法)
Response.Redirect("/page/pagename.aspx", true);
リダイレクトには機能しますが、問題はセッションの値をすべてクリアすることです。推奨されない理由.