2013-01-16 46 views
2

如果我有下面的图路线:MVC3 maproute不显示操作?

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

我能有一个像网址:

blabla.com/Home/Index/123

但是,什么样图路线的,我需要创造能够做到这一点:

blabla.com/Home/123 or blabla.com/Home/DEADBEEF

我想象它涉及沿 "{controller}/{id}/{action}"

行动和id的反转线的东西,也许应该有一个默认的动作。但MapRoute如何知道哪个控制器应该像这样对待?

+0

你有最后一个段的约束(只允许数字等)吗? –

+0

@UfukHacıoğulları不,它应该最好是一个字符串。 – ProgrammerAtWork

+0

你试过删除'/ {action}'吗? – BjarkeCK

回答

3

您可能需要沿着这些方向。

routes.MapRoute(
     name: "DefaultRoute", 
     url: "Home/{action}", 
     defaults: new { controller = "Home", action = "Index" }, 
     constraints: new { action = "[A-Za-z]*" } 
); 

或不动作

routes.MapRoute(
     name: "DefaultRoute", 
     url: "Home/{id}", 
     defaults: new { controller = "Home", action = "Index", id = "" }, 
     constraints: new { id = "[A-Za-z]*" } 
); 

您需要确保路由名称是比你有安装任何其他的途径不同,要注意路线的其它路线的顺序是是类似的可以相互覆盖。在这种情况下,请确保您可能希望在默认路由之前进行此操作,但请注意它会覆盖它。

至于没有控制器,甚至行动,你可以设置默认值,并不需要他们在路线内。

至于约束,您可以简单地将约束参数添加到路由中,以便为特定属性设置正则表达式,如上所示。

编辑: 这里有一些有用的链接了解更多路由信息,如果你需要的话。

2

您可以添加这样的路线:

routes.MapRoute(
    "CustomRoute", 
    "Home/{id}", 
    new { controller = "Home", action = "Index", id = "" }); 

确保你把它的默认路由以上。然而,这条路线将阻止HomeController中的所有其他操作。由于我们对id参数没有约束,因此框架无法知道您是在引用URL中的操作还是id。由于这条路线首先出现,它会将其映射到id参数。

+0

放置自定义路线首先解决了我的问题。你得到我的投票。 –