2009-10-24 191 views
0

我有一些问题试图在MVC中设置我的路由。我想我理解它是如何工作的,但我似乎无法设定正确的路径。ASP.NET MVC路由问题

基本上我想要做类似的东西StackOverflow的是如何工作的这样:

http://localhost/faq

我想这抢HomeController中,命中帮助行动并返回FAQ视图。我似乎无法弄清楚如何做到这一点。

而且,我尝试添加一个新的路线是这样的:

http://localhost/Boxes/25

因此,盒是控制器,25是明显的ID(参数)。到计算器怎么也有类似的:https://stackoverflow.com/questions/[question数]/[问题标题]

所以我试着这样做:

routes.MapRoute(
     "Boxes", 
     "Boxes/{boxnumber}", 
     new { 
      action="Details", cubenumber = "" 

} );

没有成功。

我也下载了Route Tester应用程序,但在这一点上似乎没有帮助。我很可能需要真正了解路由是如何工作的,但只是想知道现在是否有人能够指引我正确的方向,而不是我必须旋转我的轮子。

非常感谢你们!

回答

2

尝试以下操作:

routes.MapRoute(
     null, // optional route name 
     "faq", 
     new { controller="Home", action="Faq" }); 

routes.MapRoute(
     null, // optional route name 
     "Boxes/{boxnumber}", 
     new { controller="Boxes", action="Details", boxnumber = ""}); 

// Original route, if needed, should come AFTER more specialized routes. 
routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",        // URL with parameters 
     new { controller = "Home", action = "Index", id = "" }); // Parameter defaults 

的一些注意事项,可以帮助您更好地理解这种:

  • 控制器和动作参数必须指定,明确地在输入网址或通过您指定的默认值(如果在传入URL中丢失)
  • 添加路由的顺序是显着的 bec第一个匹配将用于每个传入的URL。在上面的例子中,如果原来的路由是先添加的,其他的将永远不会匹配(因为原始路由指定了URL的所有参数化部分的默认值)
  • 路由名称是可选的,只有当你使用路由名称生成出站URL
+0

第二条路线(对于Boxes)将隐藏Boxes方法中的所有操作。确保你对这些路线有约束 –

+0

你如何添加一个约束? –

1

当你定义一个路由时,它至少必须包含两条信息:一个控制器和一个动作。这些值可以作为参数(即URL模式中的“{参数}”部分)或默认值。

上面粘贴的路由示例包含一个操作,但它不包含控制器,因此它不能满足请求。由于您的控制器名称是“BoxesController”,因此您可以简单地将“controller ='Boxes'”添加到该路由的默认值,您会很好。

要实现faq路由,您可以简单地定义一个URL为“faq”并且具有默认值controller:“Home”,action =“Faq”的路由。