2010-07-14 104 views
2

我使用下面的代码从的RouteData如何从RouteData获取Action信息?

获得控制器/动作信息
RouteData route = RouteTable.Routes.GetRouteData(httpContext); 
string controller = route.GetRequiredString("controller"); 
string action = route.GetRequiredString("action"); 

但我应该在的情况下改变字符串“控制器”,在Global.asax.cs中的路线图不具有部分与“控制器”如下:

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

谢谢!

回答

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路由here

要玩弄路线并了解它们是如何工作的,请与Phil Haack's route debugger玩一玩。如果你被困在一个你无法弄清楚路线如何工作的情况下,这是非常宝贵的。

+0

谢谢,我真的很感激它! – Roy 2010-07-14 05:26:47