【发布时间】:2012-08-30 14:14:27
【问题描述】:
Redirect 和RedirectToAction 除了返回类型之外还有什么区别?
我们什么时候使用每个?任何现实生活场景的解释都会对我有很大帮助。
我正在查看Confusion between Redirect and RedirectToAction,但在我看来,答案似乎更具体地用于处理id 参数并返回正确的视图。
【问题讨论】:
标签: asp.net-mvc
Redirect 和RedirectToAction 除了返回类型之外还有什么区别?
我们什么时候使用每个?任何现实生活场景的解释都会对我有很大帮助。
我正在查看Confusion between Redirect and RedirectToAction,但在我看来,答案似乎更具体地用于处理id 参数并返回正确的视图。
【问题讨论】:
标签: asp.net-mvc
RedirectToAction 允许您在应用程序中构造一个指向特定操作/控制器的重定向 url,也就是说,它将使用路由表生成正确的 URL。
Redirect 要求您提供要重定向到的完整 URL。
如果您在控制器 Home 上使用参数 Id 执行操作 Index:
您可以使用RedirectToAction("Index", "Home", new { id = 5 }),它将根据您的路由表为您生成 URL。
您可以使用 Redirect,但必须自己构建 URL,因此您可以传递 Redirect("/Home/Index/5"),否则您的路由表可以正常工作。
您不能使用RedirectToAction 重定向到google.com(外部URL),您必须使用Redirect。
RedirectToAction 用于在您的应用程序中执行 302 重定向,并为您提供更轻松的方式来处理您的路由表。
Redirect 用于对其他所有内容进行 302 重定向,特别是外部 URL,但您仍然可以在应用程序中进行重定向,您只需要自己构建 URL。
最佳实践: 使用RedirectToAction 处理与您的应用程序操作/控制器相关的任何事情。如果您使用 Redirect 并提供 URL,则需要在路由表更改时手动修改这些 URL。
【讨论】:
RedirectToAction 将 POST 表单数据发送到下一个操作。如果您发布一个名为“Name”且值为“John”的字段,并且下一个操作会查找一个名为“Name”的字段,那么您将在下一个操作中看到值“John”。您可以通过运行 TempData.Clear(); 来清除这些 POSTed 值。