Jez*_*Jez 10 asp.net-mvc routes
我想重定向到同一控制器中的操作,但丢失路由值(特别是id值).事实证明这非常困难.我有像这样配置的路由:
context.MapRoute(
"Monitoring_controllerIdSpecified",
"Monitoring/{controller}/{id}/{action}",
new { action = "Status" }
);
context.MapRoute(
"Monitoring_default",
"Monitoring/{controller}/{action}",
new { controller = "Events", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)
......以及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)
}
Run Code Online (Sandbox Code Playgroud)
如果我然后访问类似的东西/Monitoring/Events/1001,RedirectToAction确实被调用,但我被重定向到/Monitoring?id=1001而不是仅仅/Monitoring.它似乎匹配第一个路由,Monitoring_controllerIdSpecified即使该路由具有id强制路由参数,我告诉它设置id为null,并且奇怪地id变成查询字符串键.换句话说,它没有正确清除/删除id路线值.设置id为routeValues传递给对象的空字符串RedirectToAction只会产生与设置它相同的效果null.
为什么这样做,我怎么能说服它不匹配第一条路线,因为id已经从路线值中完全删除了?
Jez*_*Jez 14
感谢@Slicksim,我发现答案是删除密钥,RouteData.Values而不是将其设置为null:
public ActionResult Status(int id) {
if (id > 1000) {
TempData["ErrorMessage"] = "ID too high.";
RouteData.Values.Remove("id");
return RedirectToAction("Index");
}
// (code to display status)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6575 次 |
| 最近记录: |