开发者

How to get Action information from RouteData?

I'm using following code to get the controller/action information from RouteData

RouteData route = RouteTable.Routes.GetRouteData(httpContext);
string controller = route.Ge开发者_如何学CtRequiredString("controller");
string action = route.GetRequiredString("action");

But should I change the string "controller" in case that the route map in Global.asax.cs does not have a part with "controller" as follows:

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

Thanks!


No. Your route data will always have "controller" key. If you look at the route:

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

What gets returned by RouteTable.Routes.GetRouteData comes from controller = "Home", not from "{NOTCONTROLLER}/{action}/{id}". When you register a route, whatever is in braces gets mapped to parameter with the same name in the action, except for {controller} and {action} which specify a controller or an action on the fly. Have a read on MVC routing in more detail here.

To play around with routes and to understand how they work, have a play with Phil Haack's route debugger. It's invaluable if you are stuck in a situation where you just can't work out how the route works.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜