コントローラーのアクションで、同じコントローラーの別のアクションを実行する必要があります。どちらのアクションも同じセキュリティ コンテキストにあります。RedirectAction を呼び出して他のアクションを実行する必要がありますか? それとも、両方のアクションが呼び出せる共有メソッドを作成する必要がありますか?
RedirectAction の使用例:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Search(string value)
{
IPresenter presenter = new Presenter();
List<Item> items = presenter.GetList(value);
if (items.Count > 1)
return base.View("List", items);
else
return base.RedirectAction("Detail", new { id = items.First().Id });
}
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Detail(int id)
{
IPresenter presenter = new Presenter();
return base.View(presenter.GetItemById(id));
}
そして、共有メソッドを使用した例:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Search(string value)
{
IPresenter presenter = new Presenter();
List<Item> items = presenter.GetList(value);
if (items.Count > 1)
return base.View("List", items);
else
return this.GetDetail(id);
}
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Detail(int id)
{
return this.GetDetail(id);
}
private ActionResult GetDetail(int id)
{
IPresenter presenter = new Presenter();
return base.View(presenter.GetItemById(id));
}
共有メソッドの場合、RedirectAction の場合よりも http 要求が 1 つ少なくなりますが、RedirectAction を使用すると、Asp.Net MVC の方法でより自然なフローになります。
どのケースが最適だと思いますか?その理由は? そして、状況に応じて両方が良い場合、良い状況と悪い状況は何ですか?
注: この場合、ブラウザの [戻る] ボタンを使用しているときに複数の投稿がサーバーに送信される可能性があるクライアントへの望ましくない動作を防ぐために、 PRG パターンが不可欠であることを知っているため、意図的に投稿クエリを使用しません。
どうもありがとうございました。