2010-08-12 5 views
9

Wenn ich einen Weg wie diese:Optionaler Routingparameter mit Einschränkung in ASP.NET MVC 2?

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

Dann wird die Route paßt nicht, wenn {page} fehlt, aber wenn ich die Einschränkung entferne sie paßt. Ist das ein Fehler oder eine Funktion?

Antwort

7

Es ist ein Feature: Wie kann die Bedingung übereinstimmen, wenn der Parameter optional ist? Sie können entweder den Standardwert für "Seite" auf "Seite1" setzen, um Ihr Problem zu lösen, oder Sie ersetzen Ihre Regex durch "([Pp] age \ d +)?" damit nichts zusammenpasst (ich bin mir nicht sicher und kann es nicht testen).

+1

Danke, einen Standardwert anstelle von UrlParameter.Optional gesetzt hat den Trick gemacht. Ändern der Regexp hat nicht funktioniert. – ciscoheat

+0

Sind Sie sicher, dass die Regex nicht funktioniert hat? Für mich geht das. –

8

Ich benutze ^$ | innerhalb einer Regex, wie zum Beispiel: (^ $ | [Pp] age \ d +). Ich habe diese Frage bei der Suche nach einer Antwort gefunden und dachte mir, ich würde hinzufügen, was ich hier gefunden habe.

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