asp.net-mvc - 是否可以使用 RedirectToAction 清除路由值?

标签 asp.net-mvc routes

我想重定向到同一 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路由值。设置 idrouteValues 中的空字符串传递给 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/

相关文章:

c# - 如何在自定义 HtmlHelper 中使用 C# 对象?

jquery - 将网页设置为只读?

c# - RouteData.Values 保持为空

javascript - AngularJS 路由 Controller 不重新加载

.net - 带有模板的 MVC 应用程序中的 AngularJS 路由

c# - namespace 中不存在“接口(interface)”

c# - 类型 'System.Int16' 的表达式不能用于返回类型 'System.Object'

javascript - 名为 `index` 错误的重复路由

ruby-on-rails - Rails 多态关联和路由

javascript - Angular $routeprovider Controller 不工作