2010-03-30 92 views
7

我在我的母版页和一个serach控制器和视图中有一个简单的搜索表单。 我试图获得了“myterm”字符串搜索项下列途径(例如): 根/搜索/ myterm在ASP.NET MVC搜索路线

在母版页的形式:

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

控制器动作:

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

的路线我用:

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

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

无论搜索词输入什么内容,我都会收到没有搜索词的网址“root/search”。

谢谢。

+0

我假设表单实际上发布很好,你只是添加一个路由,以便您可以直接从URL调用搜索权? – 2010-03-30 22:51:14

回答

3

您在beginform标记中使用了id,并且在您的路线中使用了{term}。

两者需要匹配。

+0

我在beginform中使用的id只是表单标识符,我怎样才能将form的searchTerm输入字段的值传递给beginform? – vobs 2010-03-30 22:39:04

3

因此,如果我正确地理解了您,您正在尝试制作路线,以便您可以转到http://www.whatever.com/search/blah,并且您将被路由到searchResults操作,并且searchTerm参数为“blah”。

以下航线将采取照顾:

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

确保的路由是默认路由前或默认将首先匹配。请注意,“术语”更改为“searchTerm”以匹配您的操作中的参数。这是必要的。