2010-03-30 8 views
7

Ich habe ein einfaches Suchformular in meiner Masterseite und einem Such-Controller und Ansicht. Ich versuche, die folgende Route für die Zeichenfolge Suchbegriff "myterm" (zum Beispiel) zu erhalten: root/Suche/mytermRoute in ASP.NET MVC suchen

Die Form, in der Master-Seite:

<% 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" /> 
         <%} %> 

Der Controller Aktion :

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

Der Weg ich verwende:

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

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

Ich bekomme immer die URL "root/search" ohne den Suchbegriff, egal welchen Suchbegriff ich eingeben möchte.

Danke.

+0

Ich gehe davon aus, dass das Formular tatsächlich gut tut und Sie gerade eine Route hinzufügen, so dass Sie die Suche direkt aus einer URL aufrufen können, richtig? –

Antwort

3

Sie verwenden id in Ihrem beginform-Tag und {term} in Ihrer Route.

Die beiden müssen übereinstimmen.

+0

Die ID, die ich in der Beginform verwende, ist nur die Form-ID. Wie kann ich den Wert aus dem Eingabefeld searchTerm des Formulars an die Beginform übergeben? – vobs

3

Also, wenn ich Sie richtig verstehe, versuchen Sie, eine Route zu machen, so dass Sie zu http://www.whatever.com/search/blah gehen können und Sie werden zu der SearchResults-Aktion mit dem searchTerm-Parameter "blah" weitergeleitet.

Die folgende Strecke kümmern, dass:

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

Sicherstellen, dass die Route vor der Standardroute ist oder der Standard wird zuerst abgestimmt werden. Beachten Sie, dass "term" in "searchTerm" geändert wird, damit es mit dem Parameter in Ihrer Aktion übereinstimmt. Das ist notwendig.