在我的控制器的一个动作中,我必须执行同一个控制器的另一个动作。这两个操作都在相同的安全上下文中。我是否必须调用 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));
}
在共享方法的情况下,我的 http 请求比在 RedirectAction 的情况下少,但在 RedirectAction 中,我有一个使用 Asp.Net MVC 方式更自然的流程。
您认为哪种情况最好,为什么?如果两者都是好的,取决于情况,好的和坏的情况是什么?
注意:我故意不使用帖子查询,因为我知道在这种情况下,PRG 模式对于防止客户端出现不需要的行为至关重要,因为在使用浏览器的后退按钮时,可能会向服务器发送多个帖子。
非常感谢。