我的母版页中有一个简单的搜索表单和一个serach控制器和视图。 我正在尝试为字符串搜索术语“myterm”获取以下路由(例如): 根/搜索/ myterm
母版页中的表单:
<% 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 :(得分:3)
您在beginform标记中使用了ID,在路线中使用了{term}。
两者需要匹配。
答案 1 :(得分:3)
因此,如果我理解正确,您正在尝试创建一条路线,以便您可以转到http://www.whatever.com/search/blah,并且您将被路由到SearchResults操作,其searchTerm参数为“blah”。
以下路线将解决这个问题:
routes.MapRoute(
"Search",
"search/{searchTerm}",
new { controller = "Search", action = "SearchResults" }
);
确保路线在默认路线之前或首先匹配默认路线。请注意,“term”更改为“searchTerm”以匹配操作中的参数。这是必要的。