4

我正在开发一个 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 操作(post)中,我最后得到了以下代码:

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

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

4

1 回答 1

4

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

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

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

return RedirectToAction("Index", "Ad", new { id = "" });
于 2011-09-11T20:29:16.590 回答