MVC3路由 - 如何确保具有特定值的路由优先?

时间:2012-06-14 20:01:05

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

给出以下两条定义的路线:

        routes.MapRoute(name: "CityCategoryPage", url: "{city}-{state}/{categoryName}/__c/", defaults: new { controller = "Home", action = "GeoSubCategories" });
        routes.MapRoute(name: "CityStateCategoryResults", url: "{city}-{state}/{categoryName}/{searchTerm}/{pageNumber}/{pageSize}", defaults: new { controller = "Results", action = "SearchCityStateCategory", pageNumber = UrlParameter.Optional, pageSize = UrlParameter.Optional });

如果我删除了第二条路线,我会在主页上看到预期的结果。但是,当第二条路线出现时,我总是转发到结果页面。

我知道为什么会发生这种情况:“_ c”仍被视为可选参数,它与第二条路线的可选条件相匹配,但不确定如何使其工作。我不想在网址上附加“ _c” - 还想知道是否还有另外一种解决方法?

感谢。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,如果没有提供搜索字词,您希望显示首页吗?

如果是这样,请尝试首先将路由与可选的searchTerm匹配,如果不存在searchTerm,则默认为主页路由,如下所示:

routes.MapRoute(name: "CityStateCategoryResults", url: "{city}-{state}/{categoryName}/{searchTerm}/{pageNumber}/{pageSize}", defaults: new { controller = "Results", action = "SearchCityStateCategory", pageNumber = UrlParameter.Optional, pageSize = UrlParameter.Optional });
routes.MapRoute(name: "CityCategoryPage", url: "{city}-{state}/{categoryName}/", defaults: new { controller = "Home", action = "GeoSubCategories" });