2010-08-12 3 views
9

Nếu tôi có một con đường như thế này:Tham số định tuyến tùy chọn có ràng buộc trong ASP.NET MVC 2?

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

Sau đó, các tuyến đường không phù hợp khi {page} là mất tích, tuy nhiên nếu tôi loại bỏ các hạn chế nó phù hợp. Đây có phải là một lỗi hoặc một tính năng?

Trả lời

7

Đó là một tính năng: làm cách nào để hạn chế có thể khớp với tham số nếu tùy chọn? Bạn có thể muốn đặt giá trị mặc định cho "trang" thành "Trang1" để giải quyết sự cố của mình hoặc thay thế regex bằng "([Pp] age \ d +)?" để cho phép không có gì để phù hợp (tôi không chắc chắn về điều này và không thể kiểm tra nó atm).

+1

Cảm ơn bạn, đặt giá trị mặc định thay vì UrlParameter.Optional đã thực hiện thủ thuật. Thay đổi regexp không hoạt động. – ciscoheat

+0

Bạn có chắc chắn regex không hoạt động? Nó làm việc cho tôi. –

8

Tôi đang sử dụng ^$ | trong một regex, chẳng hạn như: (^ $ | [Pp] age \ d +). Tôi đã tìm thấy câu hỏi này trong khi tìm kiếm câu trả lời cho điều này và tôi đã tìm thêm những gì tôi tìm thấy ở đây.

routes.MapRoute(
    name: "News Archive", 
    url: "News/{page}", 
    defaults: new { controller = "news", action = "List", page= UrlParameter.Optional }, 
    constraints: new { page= @"^$|[0-9][0-9]" });