如何从RouteData获取Action信息?

时间:2010-07-14 03:49:54

标签: asp.net-mvc

我正在使用以下代码从RouteData获取控制器/操作信息

RouteData route = RouteTable.Routes.GetRouteData(httpContext);
string controller = route.GetRequiredString("controller");
string action = route.GetRequiredString("action");

但是如果Global.asax.cs中的路由映射没有“controller”的部分,我应该更改字符串“controller”,如下所示:

            routes.MapRoute(
            "Default",                                              // Route name
            "{NOTCONTROLLER}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

谢谢!

1 个答案:

答案 0 :(得分:2)

没有。您的路线数据将始终具有“控制器”键。如果你看路线:

routes.MapRoute(
   "Default",                         // Route name
    "{NOTCONTROLLER}/{action}/{id}",  // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

RouteTable.Routes.GetRouteData返回的内容来自controller = "Home",而不是来自"{NOTCONTROLLER}/{action}/{id}"。注册路径时,括号中的任何内容都会映射到操作中具有相同名称的参数,但{controller}{action}除外,它们指定控制器或动作。更详细地阅读MVC路由{。{3}}。

要玩弄路线并了解它们的工作原理,请玩here。如果您陷入无法弄清楚路线如何运作的情况,这是非常宝贵的。