2010-02-09 4 views
3

Je veux des URL propres et ont défini deux voies:Route ne se résolu

routes.MapRoute(
    "Search", 
    "Search", 
    new { controller = "Search", action = "SearchPanel" } 
); 
routes.MapRoute(
    "SearchResults", 
    "Search/{content}", 
    new { controller = "Search", action = "Search", content = string.Empty, query = string.Empty, index = 0 } 
); 

alors j'ai deux actions:

[HttpPost] 
public ActionResult Search(string content, string query) 
{ 
    if (string.IsNullOrEmpty(query)) 
    { 
     return RedirectToAction("Home", "Application"); 
    } 
    return RedirectToAction("Search", new { content = content, query = query }); ; 
} 

public ActionResult Search(string content, string query, int? index) 
{ 
    if (string.IsNullOrEmpty(query)) 
    { 
     return RedirectToAction("Home", "Application"); 
    } 

    switch (content) 
    { 
     case "products": 
      // get products 
      return View("ResultsProducts"); 
     case "categories": 
      // get categories 
      return View("ResultsCategories"); 
     default: 
      // get all 
      return View("ResultsAll"); 
    } 
} 

J'ai un panneau de recherche générique dans ma page principale qui a un zone de texte et un bouton de soumission. Il poste à /Search. Le nom de la zone de texte est query. Tout va bien et super. Quand je frappe Search ma première action est exécuté, mais échoue sur RedirectToAction() appel:

Aucun itinéraire dans la table de routage correspond aux valeurs fournies.

Je n'arrive pas à trouver la raison pour laquelle cela ne fonctionne pas.

Répondre

2

En supprimant content, query et index à partir des valeurs par défaut dans la deuxième route, résolu le problème. Pourquoi est-ce que je ne peux pas vraiment dire, parce que ceux-ci définissent juste des défauts, quand ils ne sont pas fournis ce qui dans mon cas n'est pas le cas. Je fournis ces valeurs de toute façon.

+0

J'ai eu un problème similaire après la mise à jour de la version 2 de MVC. Je pourrais naviguer à la page spécifiant l'URL, mais si j'ai essayé d'employer RedirectToAction ("ActionName") j'ai eu la même erreur: "Aucun itinéraire dans la table de route ..." Dans mon cas, j'ai fini par dupliquer la route L'entrée fonctionnait en utilisant l'URL et supprimait les autres paramètres et maintenant le RedirectToAction fonctionne aussi. Très étrange .... Mais merci pour le pourboire. – Rick

2

J'ai eu le même problème, et heureusement, cela m'a aidé, donc je veux donner quelque chose en retour.

Il semble qu'il y ait eu un changement dans le framework MVC 2 qui vous oblige à déclarer les routes d'une manière différente.

Afin d'avoir les valeurs de route supplémentaire là (par exemple le contenu) vous ne devez pas affecter la valeur par défaut string.Empty, mais plutôt avoir

content = UrlParameter.Optional 

Cela devrait alors permettre à vos évaluations de route à se comporter comme il l'a fait dans MVC 1.

Questions connexes