2010-08-12 4 views
9

Если у меня есть маршрут, как это:Опциональный параметр маршрутизации с ограничением в ASP.NET MVC 2?

routes.Add(new Route("{controller}/{page}", 
    new RouteValueDictionary 
    { 
     { "page", UrlParameter.Optional } 
    }, 
    new RouteValueDictionary 
    { 
     { "page", @"[Pp]age\d+" } 
    }, 
    new MvcRouteHandler() 
)); 

Затем маршрут не соответствует, когда {страница} отсутствует, однако если удалить ограничение это соответствует. Это ошибка или функция?

ответ

7

Это особенность: как ограничение может совпадать, если параметр, если он по желанию? Вы можете либо захотеть установить значение по умолчанию для «страницы» на «Page1», чтобы решить вашу проблему, или заменить ваше регулярное выражение на «([Pp] age \ d +)?» чтобы ничто не соответствовало (я не уверен в этом и не могу проверить его atm).

+1

Спасибо, установив значение по умолчанию вместо UrlParameter.Optional сделал трюк. Изменение регулярного выражения не сработало. – ciscoheat

+0

Вы уверены, что регулярное выражение не работает? Меня устраивает. –

8

Я использую ^$ | в регулярном выражении, например: (^ $ | [Pp] age \ d +). Я нашел этот вопрос, ища ответ на этот вопрос, и решил, что добавлю то, что нашел здесь.

routes.MapRoute(
    name: "News Archive", 
    url: "News/{page}", 
    defaults: new { controller = "news", action = "List", page= UrlParameter.Optional }, 
    constraints: new { page= @"^$|[0-9][0-9]" }); 
Смежные вопросы