2010-08-12 81 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() 
)); 

然後路由沒有在{PAGE}缺少匹配,但是如果我刪除它匹配的約束。這是一個錯誤還是一個功能?

回答

7

這是一個特點:如果參數是可選的,約束如何匹配?你可能想要將「page」的默認值設置爲「Page1」來解決你的問題,或者用「([Pp] age \ d +)替換你的正則表達式?」允許沒有任何匹配(我不知道這個,不能測試它atm)。

+1

謝謝,設置默認值,而不是UrlParameter.Optional做了伎倆。更改正則表達式不起作用。 – ciscoheat 2010-08-12 13:59:18

+0

你確定這個正則表達式不起作用嗎?這個對我有用。 – 2012-05-07 23:50:50

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]" });