ASP.NET MVC路由问题

时间:2009-10-24 06:20:44

标签: asp.net-mvc routing

我在尝试在MVC中设置路由时遇到了一些问题。我想我理解它是如何工作的,但我似乎无法设置正确的路径。

基本上我想做类似于StackOverflow的工作方式:

http://localhost/faq

我想要抓住HomeController,点击faq动作并返回faq视图。我似乎无法弄清楚如何做到这一点。

另外,我尝试为这样的事情添加一条新路线:

http://localhost/Boxes/25

所以,Boxes是控制器,25显然是id(参数)。与stackoverflow的类似:https://stackoverflow.com/questions/[question数字] / [问题标题]

所以我试着这样做:

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

}              );

没有成功。

我还要下载Route Tester应用程序,但这似乎没有帮助。最有可能的是我需要真正了解路由的工作原理,但我只是想知道是否有人能够指出我现在正朝着正确的方向前进,而不是让我不得不旋转我的车轮。

非常感谢你们!

2 个答案:

答案 0 :(得分: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中显式指定,或者通过您指定的默认值(如果在传入的URL中丢失)
  • 添加路由的顺序非常重要,因为第一个匹配将用于每个传入的网址。在上面的示例中,如果首先添加原始路由,则其他路由将永远不会匹配(因为原始路由指定了URL的所有参数化部分的默认路径)
  • 路由名称是可选的,仅在您使用路由名称生成出站网址时才需要

答案 1 :(得分:1)

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

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

要实现faq路由,您只需定义一个URL为“faq”并具有默认值的路由:controller =“Home”,action =“Faq”。