2010-09-23 12 views
12

Ich möchte optionale Parameter in meiner Routing-Tabelle hinzufügen. Zum Beispiel würde ich die Nutzer gerne einen Produktkatalog wie folgt durchsuchen: http://www.domain.com/browse/by-category/electronics/1,2,3 etcasp.net webforms Routing: optionale Parameter

Jetzt habe ich eine Route wie folgt erstellt:

  routes.MapPageRoute(
      "ProductsBrowse", 
      "browse/{BrowseBy}/{Category}", 
      "~/Pages/Products/Browse.aspx" 
     ); 

Problem ist jedoch, dass, wenn ein Benutzer betritt http://www.domain.com/browse, Ich möchte, dass sie eine andere Seite präsentieren, auf der sie auswählen können, wie man stöbert. Daher werden die Parameter {BrowseBy} und {Category} nicht verwendet.

Gibt es einen Weg um dann separate Routen für jedes der Szenarien zu erstellen?

Vielen Dank für Ihre Zeit! Mit freundlichen Grüßen, Mark

+0

bitte meine Antwort sehen, die zeigt, wie dies mit einer Route zu tun. –

Antwort

3

Ich würde nur die separate Route erstellen.

Das heißt, Sie könnten einen benutzerdefinierten RouteHandler definieren, der basierend auf einer Konvention, die Sie definieren, automatisch diese speziellen Fälle sendet, als ob Sie eine andere Route hätten.

Alternativ können Sie den benutzerdefinierten RouteHandler zusammen mit einer Konvention verwenden, um die spezifische Seite in Ihren Routen nicht angeben zu müssen. Das ist das Äquivalent von dem, was asp.net MVC tut.

19

Ich bin gerade auf diese Frage gestoßen und wusste, dass es einen Weg geben musste, dies zu tun. Es gibt

MapPageRoute hat eine Überladung, mit der Sie Standardwerte angeben können. hier ist ein Beispiel für die Verwendung auf Ihrem Code basiert:

routes.MapPageRoute(
     "ProductsBrowse", 
     "browse/{BrowseBy}/{Category}", 
     "~/Pages/Products/Browse.aspx", 
     false, 
     new RouteValueDictionary { { "Category", string.Empty } } 
    ); 

Also, wenn der Benutzer nicht angibt, eine Kategorie dieser Weg noch getroffen werden. Das Problem, das ich bei der Verwendung von zwei separaten Routen habe, ist, dass ich Links zu meiner Site eingerichtet habe, die durch den Routennamen generiert wurden, und dass nicht zwei Routen denselben Namen haben können.

Hier ist eine gute Dokumentation von MSDN: here

6

try this:

routes.MapPageRoute(
      "ProductsBrowse", 
      "browse/{BrowseBy}/{Category}/{*queryvalues}", 
      "~/Pages/Products/Browse.aspx" 
     ); 
+0

Danke für diesen nützlichen Tipp. –