2010-03-30 19 views
7

Ho un semplice modulo di ricerca nella mia pagina principale e un controller e una visualizzazione di serach. Sto cercando di ottenere il seguente percorso per il termine di ricerca stringa "myTerm" (per esempio): root/ricerca/myTermCerca percorso in ASP.NET MVC

il modulo nella pagina master:

<% using (Html.BeginForm("SearchResults", "Search", FormMethod.Post, new { id = "search_form" })) 
          { %> 
         <input name="searchTerm" type="text" class="textfield" /> 
         <input name="search" type="submit" value="search" class="button" /> 
         <%} %> 

L'azione di controllo :

public ActionResult SearchResults(string searchTerm){...} 

Il percorso che sto usando:

routes.MapRoute(
      "Search", 
      "search/{term}", 
      new { controller = "Search", action = "SearchResults", term = (string)null } 
     ); 

routes.MapRoute(
      "Default", 
      "{controller}/{action}", 
      new { controller = "Home", action = "Index" } 
     ); 

Ricevo sempre l'url "root/search" senza il termine di ricerca, indipendentemente dal termine di ricerca immesso.

Grazie.

+0

Suppongo che il modulo stia effettivamente postando correttamente e tu stia semplicemente aggiungendo un percorso in modo che tu possa chiamare la ricerca direttamente da un URL giusto? –

risposta

3

Stai utilizzando id nel tag beginform e {term} nel percorso.

I due devono corrispondere.

+0

L'id che sto usando in beginform è solo l'identificatore del modulo, come posso passare il valore dal campo di input searchTerm del modulo al beginform? – vobs

3

Quindi se ho capito bene, stai provando a fare un percorso in modo da poter andare a http://www.whatever.com/search/blah e sarai indirizzato all'azione SearchResults con il parametro searchTerm che è "blah".

Il seguente percorso si prenderà cura di che:

routes.MapRoute(
       "Search", 
       "search/{searchTerm}", 
       new { controller = "Search", action = "SearchResults" } 
      ); 

Assicurarsi che il percorso è prima che il percorso predefinito o il valore di default sarà abbinato prima. Nota che "term" è cambiato in "searchTerm" per abbinare il parametro nella tua azione. Questo è necessario.

Problemi correlati