2010-11-04 8 views
1

Nous avons plusieurs routes dans notre fichier Global.asax.cs, mais l'une d'entre elles n'est apparemment pas utilisée.ASP.Net MVC Les routes ne fonctionnent pas correctement

// Search (NOT working). 
routes.MapRoute(
     "Search", 
     "search/{query}", 
     new { controller = "Search", action = "Index" }); 

// Homepage (I believe the problem could be here, but not sure). 
routes.MapRoute(
     "MainIndex", 
     "{language}", 
     new { controller = "Main", action = "Index", language = string.Empty }); 

Quand nous faisons une recherche dans le formulaire de recherche qui attribut action est «/Recherche », l'utilisateur est envoyé à la page d'accueil et l'URL dans la barre d'adresse est «/Recherche? Query = exemple + recherche » .

L'attribut action du formulaire est construit en utilisant ce code:

<form id="form1" action="<%= Url.Action("Index", "Search") %>"> 

me semble juste, mais le nom de l'action doit être «/recherche » au lieu de «/Recherche », non?

+0

Je suppose que la route de recherche est répertoriée * avant * la route MainIndex dans votre code (comme vous l'avez dans votre message), correct? –

+0

Oui, Hector. La route de recherche est listée __avant__ la route MainIndex. –

Répondre

1

Essayez de faire le match "search/{query}" le cas =>"Search/{query}"

Eh bien votre action sur la balise form est /Search/Index, qui correspondra à votre itinéraire Search/{query}, mais votre requête sera Index. Toutefois, avec le ?query=example+search à la fin de votre itinéraire, la route de recherche ne saura pas comment gérer ce paramètre de requête. Je voudrais simplement mettre à jour l'attribut d'action sur la balise de formulaire pour être simplement /Search et ne pas utiliser l'aide d'URL.

+0

Non, ce n'était pas la cause de l'erreur puisque la route était bien faite. Seule la recherche d'itinéraire n'a pas été interceptée lors de la création de l'attribut action du formulaire, car l'itinéraire demandait le paramètre de requête qui n'existait pas avant l'envoi du formulaire ("/ search" ne correspondait pas à l'itinéraire "search/{query}"). Mais merci! Bon essai +1 –

3

Je viens d'essayer votre itinéraire avec la vue suivante

<form id="form1" method="post" action="<%= Url.Action("Index", "Search") %>"> 
Enter something: <input type="text" name="query" id="query" value="hello" /> 
<input type="submit" /> 
</form> 

et un contrôleur comme celui-ci

public ActionResult Index(string query) 
{ 
    return View(); 
} 

et il fonctionne OK. Notez que (1) j'utilise method = post et (2) que la zone de texte a à la fois un nom et un ID défini sur "query", ce que Html.TextBox aurait fait pour vous. C'est ce qui a permis à la liaison de ramasser la valeur et de la transmettre correctement au contrôleur.