代码之家  ›  专栏  ›  技术社区  ›  Nathan Taylor

ASP.NET MVC-附加意外值的路由引擎

  •  0
  • Nathan Taylor  · 技术社区  · 14 年前

    我有一对路由,两者都指向同一个动作,根据提供的路由数据,我希望选择一条路由而不是另一条。问题是,路由引擎似乎自动附加路由值,我明确告诉它不要这样做。

    routes.MapRoute(
     "Products_Search_Paged",
     "products/search/page{pageNbr}",
     new { controller = "Products", action = "Search" },
     new { pageNbr = @"\d+" },
     new[] { "Web.Components.Controllers" }
    );
    
    routes.MapRoute(
     "Products_Search",
     "products/search",
     new { controller = "Products", action = "Search" },
     new[] { "Web.Components.Controllers" }
    );
    

    /第{pageNbr}页 产品搜索页面 .

    产品搜索页面 ,例如,我想创建一个指向 ,如果我打电话 Url.Action("Search, "Products", new { pageNbr = "" }) 它无视我的声明 pageNbr = "" 创建链接 Url.Action("Search", "Products", new { pageNbr = 5 }) 我的结局是 /产品/搜索/第5页 ,如预期。

    我试着重新安排路线 之前 产品搜索页面 作为 /第3页 而不是生产 .

    从目前为止我进行的测试来看,我找不到任何原因 页码br

    目前想到的解决这个问题的两种方法是 Url.RouteLink() 明确定义要使用的路由,或手动删除 在生成URL之前,从RouteData.DataTokens获取密钥。不过,在我选择其中一种解决方案之前,我希望有人能够找出为什么我目前看似合法的方法没有产生预期的结果。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Brad Wilson    14 年前

        2
  •  0
  •   Jon    14 年前

    问题似乎是您的正则表达式限制了 pageNbr -空字符串不匹配 \d+

    UrlParameter.Optional 可能会有帮助。您也可以尝试将regex改为 \d*