ASP.NET MVC中的Post/Redirect/Get模式

15
在 ASP.NET MVC 中实现 Post/Redirect/Get 模式的最佳实践是什么?特别是在想要重定向回到初始 action/controller 时,最好的方法是什么?
这是我目前的做法:
  1. 向用户显示表单。
    • 在表单中使用 <%= Html.Hidden("returnUrl") %>
    • 在 action 中使用 ViewData["returnUrl"] = Request.Url;
  2. 用户通过 POST 提交表单
  3. 如果 returnUrl 绑定模型不为 null,则重定向到该 URL。否则,重定向到主页。
这样可以完成工作,但感觉会导致大量重复代码。我也意识到可能可以重定向到 Request.UrlReferrer...
你认为最清洁、最理想的实现方法是什么?
2个回答

14

你现在的方法可以,但看起来有点过于考虑。你的POST操作是否会接收来自多个表单的表单提交?如果不是的话,为什么要使用隐藏的表单字段呢?你可以使用简单的RedirectToAction("MyAction")来实现。


目前,我不会从多个表单中接收表单提交 - 所以我完全理解你的观点。在这种特殊情况下,我可能只会使用RedirectToAction。但是,如果我有多个表单,您是否仍然建议我通过当前的方法来处理? - Charles

4
通常,处理POST请求的操作知道在成功提交后需要重定向到哪里。因此,每个实现RGP的操作只需调用RedirectToAction(string)即可。
public ViewResult Edit(string email)
{
  // save the email
  return RedirectToAction("Edit");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接