什么时候使用View()和RedirectToAction

时间:2011-04-25 06:12:30

标签: asp.net-mvc-2 asp.net-mvc-3

这个existing question总结了我的问题的基础知识。那里最好的答案告诉了两种方法之间的区别。我正在寻找关于使用哪种方法的指南。

简而言之,我在控制器中有一个动作,它处理一个表单,然后显示处理结果。我应该何时使用return View()而不是return RedirectToAction("FormResult")

3 个答案:

答案 0 :(得分:22)

我冒昧地说,有一条硬性规则(尽可能多) - Post/Redirect/Get (PRG) pattern。 MVC的标准(以及html助手实际上希望你使用这种模式)是:

  1. 发布您的数据。
  2. 如果出现错误(例如ModelState.IsValid=false),则return View()另有return RedirectResult
  3. 如果出现错误,HTML帮助程序实际上会查看已重新显示的已发布值,而不是View(model)传递给它们的内容 - 再次因为PRG模式“应该”发生的事情。

答案 1 :(得分:9)

你真的可以使用。一般来说,在发布表单后,您需要重定向,以便刷新页面不会导致表单重新发布。但是,有时候,将状态复制到新页面是不可行的,并且您的处理是幂等的,因此刷新不会对任何事情造成伤害。

这不是一个强硬的规则。你必须权衡利弊。

答案 2 :(得分:6)

  1. Return View不会发出新请求,只是呈现视图
  2. 而不更改浏览器地址栏中的网址。返回
    RedirectToAction在浏览器中生成新请求和URL 地址栏由MVC生成的URL更新。
  3. Return Redirect还会在浏览器的地址中生成新请求和URL 栏已更新,但您必须指定要重定向的完整URL
  4. 在RedirectToAction和Redirect之间,最佳做法是使用 RedirectToAction用于处理您的应用程序的任何事情 动作/控制器。如果您使用重定向并提供URL,您将会 需要在更改路由表时手动修改这些URL。
  5. RedirectToRoute重定向到在中定义的指定路由 路线表。