【问题标题】:RedirectToAction redirects with query parameters?RedirectToAction 使用查询参数重定向?
【发布时间】:2011-09-11 16:12:45
【问题描述】:

我正在开发一个 ASP.NET MVC 应用程序,但遇到了一件奇怪的事情。

我有两个这样的控制器动作:

[CustomAuthorize(Roles = SiteRoles.Admin)]
public ActionResult Review(int? id)

[CustomAuthorize(Roles = SiteRoles.Admin)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Review(AdReview data)

首先我调用Review 动作,参数为null,这将打开一个包含项目列表的网页。这些项目被链接回第一个带有 id 集的 Review 操作。

当 ID 已提供给审核操作时,将返回此项目的编辑网页。在进行一些更改后点击提交时,我们将结束第二个审核操作(发布)。此处将保存该项目。

到目前为止一切都很好。

现在,在最后的 Review 操作(发布)中,我最后得到了以下代码:

return RedirectToAction("Review", "Ad");

这会再次触发第一个Review动作,问题是它会提供之前的id吗?我的想法是 RedirectToAction 不会提供任何参数?

【问题讨论】:

  • 检查这个stackoverflow.com/questions/1257482/…。在您的情况下,它看起来像:return RedirectToAction("Review", new { id = "Ad"});
  • Samich > 在这种情况下,您的示例将生成网址 /Controller/Action/Controller /Ad/Review/Ad 这确实有效,但网址应该只是 /Ad/Review ?我之前使用过重定向,然后从来没有任何参数转发到新操作?
  • 我现在无法检查。或者指定id为null,比如return RedirectToAction("Review", new { id = null })?
  • Samich > 但是这会起作用: return RedirectToAction("Review", new { id = ""});但是感觉不对?我之前用过Redirect,但是没有参数转发?
  • Samich > 是的,我已经尝试过 RedirectToAction("Review") 但这不起作用,参数(id)将被转发?

标签: asp.net-mvc redirect controller-action


【解决方案1】:

我的想法是 RedirectToAction 不会提供任何参数?

你的理解是错误的。如果目标 url 包含同名的路由参数,则模型状态中存在的参数会自动转发。在这种情况下,您有一个 id 参数正在发布(可能作为输入字段的一部分或 url 的一部分),并且当您重定向回原始索引操作时,因为您的路由定义有一个 id 标记最后RedirectToAction 方法将填充它。

作为避免此行为的解决方法,您可以明确指定在重定向时不应发送 id 参数:

return RedirectToAction("Index", "Ad", new { id = "" });

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 2021-12-11
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    相关资源
    最近更新 更多