如何使用MVC3中具有相同数量的参数的两个动作处理路由?

Dan*_*nny 0 asp.net-mvc asp.net-mvc-3

可能重复:
ActionLink在URL中显示参数而不是查询字符串?

我有以下路线:

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

 routes.MapRoute(
          "Details", // Route name
          "{Home}/{details}/{id}/{name}", // URL with parameters
          new { 
              controller = "Home", 
              action = "Details", 
              id = UrlParameter.Optional, 
              name = UrlParameter.Optional } // Parameter defaults
      );
Run Code Online (Sandbox Code Playgroud)

我正在努力:

/ home/list/1/a
/ home/details/2/b

上面的结果在home/details/2?name = b

Dar*_*Teo 5

假设你没有弄错你的代码示例,你不能.

路线处理程序将选择匹配的第一条路线.

但是,从它看起来你真正想要的是这个:

routes.MapRoute(
          "List", // Route name
          "home/list/{id}/{name}", // URL with parameters
          new { 
              controller = "Home", 
              action = "List", 
              id = UrlParameter.Optional, 
              name = UrlParameter.Optional } // Parameter defaults
      );

 routes.MapRoute(
          "Details", // Route name
          "home/details/{id}/{name}", // URL with parameters
          new { 
              controller = "Home", 
              action = "Details", 
              id = UrlParameter.Optional, 
              name = UrlParameter.Optional } // Parameter defaults
      );
Run Code Online (Sandbox Code Playgroud)

事实上,这两者足够相似,可以被提炼成1条路线

 routes.MapRoute(
          "Details", // Route name
          "{controller}/{action}/{id}/{name}", // URL with parameters
          new { 
              controller = "Home", 
              action = "List", 
              id = UrlParameter.Optional, 
              name = UrlParameter.Optional } // Parameter defaults
      );
Run Code Online (Sandbox Code Playgroud)