我的路线定义为:
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,但这看起来有点脏。是否有更简化的方法来实现这一目标?
答案 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”。