给出以下两条定义的路线:
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” - 还想知道是否还有另外一种解决方法?
感谢。
答案 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" });