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

时间:2011-09-21 08:41:38

标签: asp.net-mvc asp.net-mvc-3

  

可能重复:
  ActionLink to show parameters in URL instead of querystring?

我有以下路线:

  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
      );

我正在努力:

/家庭/列表/ 1 /一个
/家庭/信息/ 2 / B

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

2 个答案:

答案 0 :(得分: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
      );

事实上,这两者足够相似,可以被提炼为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
      );

答案 1 :(得分:0)

避免使用两个UrlParameter.Optional声明创建路由。

您可以通过在默认路线上方添加一条路线来实现路由,例如:

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

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

第一个路径将在声明两个变量时创建所需的URL。第二条路线适用于一个变量或无变量。