ASP.NET MVC url搜索参数没有问号

时间:2010-02-23 17:41:15

标签: asp.net asp.net-mvc url url-routing

我的路线定义为:

  

routes.MapRoute( “AllUsers的”,
  “用户/搜索/ {搜索}”,新{   Controller =“Users”,action =   “索引”});

和表格:

<% using (Html.BeginForm("Index", "Users/Search/", new { RouteValue = "AllUsers" }, FormMethod.Get, new { id = "searchForm" })){%>
 <input id="searchBox" name="search" type="text" />
 <input type="submit" id="submit" value="Search" /><%} %>

目前正如预期的那样,这会创建一个网址 ../Users/Search/?search=searchTerm
但我想要的是:
../Users/Search/searchTerm

这怎么可能?我想过使用javascript,但这看起来有点脏。是否有更简化的方法来实现这一目标?

5 个答案:

答案 0 :(得分:2)

您无法使用HTML表单执行此操作。虽然您可以使用JavaScript模仿行为。

答案 1 :(得分:2)

服务器端重定向怎么样?

答案 2 :(得分:1)

你可以这样做:

<input type="submit" id="submit" value="Search" 
    onclick="$('form').attr('action', $('form').attr('action') + $('#searchBox').val());" />

这看起来有点难看。你也可以不使用表格并拥有:

<input type="button" id="submit" value="Search" 
    onclick="window.location.href = 'search/' + $('#searchBox').val();" />

除此之外,您可以允许原始提交转到奇怪的网址,但在控制器中使用RedirectToAction。

答案 3 :(得分:0)

使用jQuery你可以这样:

<script type="text/javascript">
        $(function(){
            $("#submit").click(function(){
                document.location.href = $("form").attr("action") + $("#searchBox").val();
                return false;
            });
        });
    </script>

答案 4 :(得分:0)

尝试改变如下:

routes.MapRoute("AllUsers",
"Users/Search/{id}", new { Controller = "Users", action= "Index"});

和表格:

<% using (Html.BeginForm("Index", "Users/Search/", 
  new { RouteValue = "AllUsers" }, FormMethod.Get, new { id = "searchForm" })){%>
  <input id="searchBox" name="id" type="text" />
  <input type="submit" id="submit" value="Search" /><%} %>

未经测试,但“id”是默认路由值,未创建“?name = value”。

相关问题