views:

110

answers:

2

Hi. I have a simple search form in my master page and a serach controller and view. I'm trying to get the following route for the string search term "myterm" (for example): root/search/myterm

The form in the master page :

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

The Controller Action:

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

The Route I'm Using :

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

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

I'm always getting the url "root/search" without the search term, no matter what search term I enter.

Thanks.

+1  A: 

You're using id in your beginform tag and {term} in your route.

The two need to match.

Simon
The id I'm using in the beginform is just the form identifier, how can I pass the value from the searchTerm input field of the form to the beginform ?
olst
A: 

So if I understand you correctly, you are trying to make a route so that you can go to http://www.whatever.com/search/blah and you will be routed to the SearchResults action with the searchTerm parameter being "blah".

The following route will take care of that:

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

Make sure the route is BEFORE the default route or the default will be matched first. Notice that "term" is changed to "searchTerm" to match the parameter in your action. This is necessary.

Bradley Mountford