我想重定向到同一 Controller 中的操作,但丢失了路由值(特别是 id
值)。事实证明,这出奇地困难。我有这样配置的路由:
context.MapRoute(
"Monitoring_controllerIdSpecified",
"Monitoring/{controller}/{id}/{action}",
new { action = "Status" }
);
context.MapRoute(
"Monitoring_default",
"Monitoring/{controller}/{action}",
new { controller = "Events", action = "Index" }
);
... 以及内部的操作方法
EventsController
像这样:public ActionResult Status(int id) {
if (id > 1000) {
TempData["ErrorMessage"] = "ID too high.";
return RedirectToAction("Index", new { id = (int?)null });
}
// (code to display status)
}
如果我然后访问类似
/Monitoring/Events/1001
的内容, RedirectToAction
确实被调用了,但我被重定向到 /Monitoring?id=1001
而不仅仅是 /Monitoring
.好像是匹配第一条路由,Monitoring_controllerIdSpecified
,即使这条路线有 id
作为强制路由参数,我告诉它设置 id
为空,并奇怪地转向 id
进入查询字符串键。换句话说,它没有正确清除/删除 id
路由值。设置 id
到 routeValues
中的空字符串传递给 RedirectToAction
的对象与将其设置为 null
的效果相同.为什么这样做,我如何说服它不匹配第一条路线,因为
id
已从路由值中完全删除?
最佳答案
感谢@Slicksim 我发现答案是从 RouteData.Values
中删除 key 而不是将其设置为空:
public ActionResult Status(int id) {
if (id > 1000) {
TempData["ErrorMessage"] = "ID too high.";
RouteData.Values.Remove("id");
return RedirectToAction("Index");
}
// (code to display status)
}
关于asp.net-mvc - 是否可以使用 RedirectToAction 清除路由值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15807906/