我正在开发一个ASP.NET MVC应用程序并且遇到了一个奇怪的事情。
我有两个这样的控制器动作:
[CustomAuthorize(Roles = SiteRoles.Admin)]
public ActionResult Review(int? id)
[CustomAuthorize(Roles = SiteRoles.Admin)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Review(AdReview data)
首先,我使用null作为参数调用Review
操作,这将打开一个包含项列表的网页。这些项目将链接回第一个具有ID设置的Review动作。
如果已向审核操作提供了ID,则会为此项目返回编辑网页。在进行一些更改后点击提交时,我们将在第二次审核操作(帖子)结束。这里的项目将被保存。
到目前为止一切都很好。
现在,在上次审核操作(帖子)中,我最后得到了以下代码:
return RedirectToAction("Review", "Ad");
这会再次触发第一个Review动作,问题是它会提供以前的id吗?我的想法是RedirectToAction不提供任何参数?
答案 0 :(得分:5)
我的想法是RedirectToAction不提供任何参数?
你的理解是错误的。如果目标URL包含具有相同名称的路由参数,则会自动转发模型状态中存在的参数。在这种情况下,您有一个id
参数正在发布(可能作为输入字段的一部分或网址的一部分),当您重定向回原始的索引操作时,因为您的路由定义有{{1最后{}}方法将填充它。
作为避免此行为的解决方法,您可以明确指定在重定向时不应发送id
参数:
RedirectToAction