2011-09-01 3 views
0

J'ai quatre itinéraires définis comme ceci:bâtiment URL dans ASP.NET MVC

//Project list with page number 
     routes.MapRoute(
      "Filtered projects 1", 
      "Projects/All/{page}", 
      new { controller = "Projects", action = "All", page = UrlParameter.Optional } 
      ); 

     //Project list with page number and filtering by region 
     routes.MapRoute(
      "Filtered projects 2", 
      "Projects/All/Regions/{regions}/{page}", 
      new { controller = "Projects", action = "All", regions = UrlParameter.Optional, page = UrlParameter.Optional} 
      ); 

     //Project list with page number and filtering by subject 
     routes.MapRoute(
      "Filtered projects 3", 
      "Projects/All/Subjects/{subjects}/{page}", 
      new { controller = "Projects", action = "All", subjects = UrlParameter.Optional, page = UrlParameter.Optional } 
      ); 

     //Project list with page number and filtering by region and subject 
     routes.MapRoute(
      "Filtered projects 4", 
      "Projects/All/Regions/{regions}/Subjects/{subjects}/{page}", 
      new { controller = "Projects", action = "All", regions = UrlParameter.Optional, subjects = UrlParameter.Optional, page = UrlParameter.Optional } 
      ); 

Cela me permet d'avoir une liste paginée qui peut également être filtré par régions ou sujets.

Je veux faire une série de liens avec les sujets tels que je peux cliquer sur un sujet et il retournera l'un des urls ci-dessus, au besoin, avec le/Sujets/SubjectName bit joint au besoin. Je veux également permettre à l'utilisateur de cliquer sur plusieurs liens, ce qui devrait donner des URLs comme ci-dessus avec/Sujets/sujet1 _ * subject2 * _ subject3.

Je n'arrive juste pas à comprendre comment faire. J'ai la liste des sujets montrant dans une vue partielle. Lorsque je génère les liens hypertexte, comment puis-je accéder à l'URL et modifier (ou ajouter ou supprimer selon les besoins) la partie/Subjects/*?

C'était facile avec querystrings, car ils pourraient facilement être cassés en valeur paris, mais avec ces belles URLs cela semble assez difficile ... Des conseils? MISE À JOUR: J'ai oublié d'ajouter que j'aimerais utiliser cette méthode de filtrage avec différentes actions sur le même contrôleur. Je ne sais pas si cela compte, mais je pensais être précis.

MISE À JOUR 2: Je pense que ma question est pas tout à fait assez clair ...

Ce que je suis en train de faire est de générer un lien pour chaque sujet à mon avis partiel en ce qui concerne le lien de la vue principale . Le hic, c'est que le lien doit se conformer à l'une des routes ci-dessus. Dites, je l'appelle de/localhost/Projects/All et que vous voulez trier par sujet1, je voudrais obtenir des urls en disant/localhost/Projects/All/Sujets/subject1.jpg (0). Si j'ai appelé ceci de/localhost/Projects/Search/Something/10 (ie page 10 des résultats pour la recherche "Quelque chose", je n'ai pas cette route dans la liste, mais c'est dans les travaux), je voudrais URLs comme localhost/Projects/Recherche/Something/Sujets/Sujet1/10. Ou d'ailleurs allez de/localhost/Projects/All/4 à localhost/Projects/All/Sujets/subject1/4.

Je peux facilement ajouter le bit/Subjects/Subject1 à l'URL, mais je ne suis plus conforme à mes routes ... En d'autres termes, comment puis-je extraire les différents bits de mon URL, les modifier et puis les recoudre ensemble?

Est-ce possible? Ou est-ce que je devrais juste oublier la prettyness et employer des querystrings?

Répondre

0

Utilisez ViewContext.RouteData pour obtenir en cours informations d'itinéraire.

+0

Merci, ça me va un peu plus loin, mais mes identifiants de l'URL, les/Regions/et/Subjects/ne le font pas dans les données de route, donc je ne peux pas recréer l'URL après avoir obtenu les valeurs à partir de cela. Avez-vous des conseils à ce sujet? –

+0

l'a résolu. Cela m'a aidé, alors merci! –

0

Url.Action("All","Projects", new{subjects = "some subject"})

vous donnera l'URL correcte formulée pour celui qui vient d'avoir un sujet passé, changez les params dans l'objet anonyme de le modifier comme apporpriate

+0

Merci, je le sais, mais ça ne fait pas ce dont j'ai besoin. –