什么时候使用View()和RedirectToAction

Ext*_*kun 19 asp.net-mvc-3 asp.net-mvc-2

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

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

Ada*_*SFT 22

我冒昧地说有一条硬性规则(尽可能多) - Post/Redirect/Get(PRG)模式.MVC的标准(以及html帮助程序实际上希望您使用此模式)是:

  1. 发布您的数据.
  2. 如果有错误(即ModelState.IsValid=false),return View()否则return RedirectResult.

如果出现错误,HTML帮助程序将实际查看已发布的值以重新显示,而不是通过它们View(model)- 再次因为PRG模式"应该"发生的事情.

  • 优秀的答案!`RedirectResult` 需要 `return new RedirectResult("url")`,不过大概像 `return RedirectToAction("Index")` 这样的东西更容易、更清晰。 (2认同)

Tal*_*joe 9

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

并不是说有一条严厉的规则.你必须权衡利弊.


Aru*_*age 6

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