ASP.NET MVC路由映射问题

时间:2010-09-09 16:07:13

标签: asp.net-mvc asp.net-mvc-2 url url-routing asp.net-mvc-routing

我正在努力在asp.net mvc 2中生成出站网址。这是方案。

控制器:MoveController 行动:索引() 查看:Index.aspx

现在我想要的是将多个网址映射到具有不同参数( locationId )值的同一控制器(MoveController)和操作(索引)

e.g。

  • 网址 - >的的RouteData
  • / Production / - >移动/索引/ 1
  • /安装/ - >移动/索引/ 2
  • / Move / 3 / - >移动/索引/ 3

我的映射看起来像这样:

 public static void RegisterRoutesTo(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{*favicon}", new
        {
            favicon = @"(.*/)?favicon.ico(/.*)?"
        });

        routes.MapRoute(
           null,                                              // Route name
           "Production/{locationId}",                           // URL with parameters
           new
           {
               controller = "Move",
               action = "Index"
           },  // Parameter defaults
           new
           {
               locationId = @"\d+"
           }// constraint for Production url
       );

        routes.MapRoute(
           null,                                              // Route name
           "Installation/{locationId}",                           // URL with parameters
           new
           {
               controller = "Move",
               action = "Index"
           },  // Parameter defaults
           new
           {
               locationId = @"\d+"
           }// constraint for Production url
       );

        routes.MapRoute(
           null,                                              // Route name
           "Move/{locationId}",                           // URL with parameters
           new
           {
               controller = "Move",
               action = "Index"
           },  // Parameter defaults
           new
           {
               locationId = @"\d+"
           }// constraint for Production url
       );

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

现在要在我的母版页面菜单中生成出站网址,我正在做一些类似的事情

<%= Html.ActionLink("Production", "Index", "Move", new{locationId = 1}, null)%>
<%= Html.ActionLink("Installation", "Index", "Move", new{locationId = 2}, null)%>

但上面生成了

  • /生产/ 1
  • /生产/ 2

这是正确的,但我怎么能告诉它生成

  • /生产/当locationId = 1时
  • /安装/当locationId = 2

任何想法?

等待,

3 个答案:

答案 0 :(得分:2)

远射,但绝对值得一试,因为你上面的路线没有表达你想要的东西:

routes.MapRoute(
   null,                                              // Route name
   "Production/",                           // URL with parameters
   new
   {
       controller = "Move",
       action = "Index",
       locationId = 1
   }

);

routes.MapRoute(
   null,                                              // Route name
   "Installation/",                           // URL with parameters
   new
   {
       controller = "Move",
       action = "Index",
       locationId = 2
   }

);

答案 1 :(得分:1)

您是对的,生产和安装路线完全相同。我只是不知道如何区分它们,因为它们都使用相同的参数{locationId}但具有不同的值。正如您所看到的,我提供的默认值不同,但这只是一个默认值,因此我尝试对它们设置约束

routes.MapRoute(
               null,                                              // Route name
               "Production/{locationId}",                           // URL with parameters
               new
               {
                   controller = "Move",
                   action = "Index",
                   locationId = 1
               }
               ,  // Parameter defaults
               new
               {
                   locationId = @"1"
               }// constraint for Production url
           );

            routes.MapRoute(
               null,                                              // Route name
               "Installation/{locationId}",                           // URL with parameters
               new
               {
                   controller = "Move",
                   action = "Index",
                   locationId = 2
               }
               ,  // Parameter defaults
               new
               {
                   locationId = @"2"
               }// constraint for Production url
           );

这有效,但我认为在定义Html.ActionLink时为参数赋予null值

<%= Html.ActionLink("Installation", "Index", "Move", null, null)%>

它生成了Production / url,它应该是顺序中的第一个。

我不知道的是,一个人必须在网址中定义{parameters}。我一直认为需要在网址中定义参数。

感谢所有帮助人员

答案 2 :(得分:0)

提供的ActionLink助手扩展程序不会这样做。您需要编写一个新的自定义ActionLink方法,该方法将根据需要有条件地呈现。