在ASP.NET MVC中搜索路由

7

我在我的主页面上有一个简单的搜索表单,还有一个搜索控制器和视图。 我正在尝试获取字符串搜索术语“myterm”的以下路由(例如): root/search/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"的URL,无论我输入什么搜索词。谢谢。

我假设表单实际上已经成功提交了,你只是在添加一个路由,以便可以直接从URL调用搜索,对吗? - Bradley Mountford
2个回答

3
所以如果我理解正确,您想创建一个路由,这样您就可以访问http://www.whatever.com/search/blah,并且将路由到SearchResults操作,其中searchTerm参数为“blah”。
以下路由将处理此操作:
routes.MapRoute(
              "Search",
              "search/{searchTerm}",
              new { controller = "Search", action = "SearchResults" }
            );

确保路由在默认路由之前,否则默认路由将首先匹配。注意,“term”更改为“searchTerm”,以匹配您的操作中的参数。这是必要的。


3

你在beginform标签中使用了id,而在路由中使用了{term}。

这两个需要匹配。


我在beginform中使用的id只是表单标识符,我该如何将表单中searchTerm输入字段的值传递到beginform中? - vobs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接