MVC опустить необязательный параметр страницы - PullRequest
1 голос
/ 22 июня 2010

Я имею в виду следующий URL:

/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 });

Теперь по моему вопросу, я хочу сделать необязательной часть -p {page}, а не только параметр {page}. Таким образом, я могу использовать один маршрут, а также использовать его для сопоставления исходящих URL-адресов с Url.RouteUrl(RouteValueDictionary) (который затем автоматически удаляет часть страницы, если параметр страницы в словаре равен 1).

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Я не уверен, что хорошо понимаю, что вы хотели бы, но все же почему-то я думаю, что использование некоторого ограничения регулярного выражения может решить вашу проблему.Может быть, как-то так:

routes.MapRoute(null, "{category}/{branch}/{citywithp}{page}.html",
            new { controller = "Branch", action = "Index" },
            new {citywithp = @"p-\d+$" } );
0 голосов
/ 25 июня 2010

Для этого мне понадобилось 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 });

Таким образом, я могу отобразить все URL-адреса, входящие со вторым и третьим маршрутом и исходящие с первым и вторым.

...