2010-08-12 32 views
9

Si tengo una ruta como esta:Parámetro de enrutamiento opcional con restricción en ASP.NET MVC 2?

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

A continuación, la ruta no coincide al {página} no está presente, sin embargo, si se quita la restricción de que coincide. ¿Es esto un error o una característica?

Respuesta

7

Es una característica: ¿cómo puede el partido restricción si el parámetro opcional si? Puede que desee establecer el valor predeterminado para "página" a "Página1" para resolver su problema, o reemplace su expresión regular por "([Pp] age \ d +)?" para permitir que nada coincida (no estoy seguro de esto y no puedo probarlo atm).

+1

Gracias, establecer un valor predeterminado en lugar de UrlParameter.Optional hizo el truco. Cambiar la expresión regular no funcionó. – ciscoheat

+0

¿Estás seguro de que la expresión regular no funcionó? Esto funciona para mi. –

8

estoy usando ^$ | dentro de una expresión regular, como: (^ $ | [Pp] age \ d +). Encontré esta pregunta mientras buscaba una respuesta a esto y pensé que agregaría lo que encontré aquí.

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