MVC省略可选页面参数

时间:2010-06-22 15:52:31

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

我记下以下网址:

/restaurants/italian/miami.html
/restaurants/italian/miami-p2.html

使用这些路线

routes.MapRoute(null, "{category}/{branch}/{city}-p{page}.html",
                new { controller = "Branch", action = "Index" });
routes.MapRoute(null, "{category}/{branch}/{city}.html",
                new { controller = "Branch", action = "Index", page = 1 });

现在我的问题是,我想让url的“-p {page}”部分可选,而不仅仅是{page}参数。这样我就可以使用单个路由,并使用它来映射带有Url.RouteUrl(RouteValueDictionary)的出站URL(如果字典中的页面参数为1,则会自动删除页面部分)。

2 个答案:

答案 0 :(得分:1)

我不确定我很清楚你想要什么,但我仍然认为使用一些regular expression constraint可能会解决你的问题。也许是这样的:

routes.MapRoute(null, "{category}/{branch}/{citywithp}{page}.html",
            new { controller = "Branch", action = "Index" },
            new {citywithp = @"p-\d+$" } );

答案 1 :(得分:0)

为了达到这个目的,我需要3条路线:

routes.MapRoute(null, "{category}/{branch}/{city}.html",
                new { controller = "Branch", action = "Index" },
                new { page = "1" });

routes.MapRoute(null, "{category}/{branch}/{city}-p{page}.html",
                new { controller = "Branch", action = "Index" });

routes.MapRoute(null, "{category}/{branch}/{city}.html",
                new { controller = "Branch", action = "Index", page = 1 });

通过这种方式,我可以使用第二条和第三条路线映射入站的所有网址,使用第一条和第二条路线映射出站。