2011-05-30 98 views
0

我有一个表格如下图所示: -Asp.net MVC路由查询

<% using (Html.BeginForm("search", "home", FormMethod.Get)) { %> 

<%= Html.TextBox("location", "") %> 
<input type="submit" value="Search All Jobs" /> 

<% } %> 

,并在Global.asax中,我有这条路线

routes.MapRoute(
"Search", // Route name 
"{controller}/{action}/{location}", // URL with parameters 
new { controller = "Home", action = "Index", location = UrlParameter.Optional }); 

现在每当我点击提交按钮,我得到的网址像

http://localhost/home/search?location=karachi

,但我想

http://localhost/home/search/karachi

任何想法?

回答

1

你得到的网址是正常的,这就是根据specification GET参数由浏览器发送,并没有太多你可以做的。

随着HTTP“获取”的方法,所述形式 数据集被附加到由动作属性 (用问号(“?”)作为 分离器)中指定的URI 和这个新的URI发送给 的处理代理。

最好的办法是javascript拦截表单的提交,取消默认动作并重写URL。就我个人而言,我不会为此而烦恼,并让浏览器发送规范中定义的用户输入。

但如果你真的坚持实现这一这里的JavaScript的例子:

$('form').submit(function() { 
    var location = encodeURIComponent($('#location').val()); 
    var url = '<%= Url.Action("search", "home", new { location = "_TO_REPLACE_" }) %>'; 
    window.location.href = url.replace('_TO_REPLACE_', location); 
    return false; 
}); 
+0

@John Weldon,恐怕你是错过了这个问题的观点。在使用'method =“GET”'提交表单之后,OP希望将'http:// localhost/home/search/karachi'作为url。 Url路由与答案无关,既不是在服务器上声明的动作。 – 2011-05-30 06:27:54

+0

让我补充一点,我在搜索页面上有一个分页控件(自制的),它会正确生成所需的链接。因为它生成http:// localhost/home/search/karachi?page = 2 – Zohaib 2011-05-30 06:28:31

+0

@Zohaib,这是因为分页控件使用Html.ActionLink来生成url。用HTML'

'这是不可能的。您应该使用JavaScript,并且我相信这是实现您所需要的唯一方法。 – 2011-05-30 06:29:43

1

你其实并不需要任何形式的在这里,只需要实现上提交按钮onclick事件和追加与URL位置值和通过使用此JavaScript代码来执行GET请求。

var loc = document.getElementById("location"); 
document.location.href = "/home/search/"+loc.value; 
+0

谢谢老兄,javascript是唯一的解决方案。 – Zohaib 2011-05-30 06:36:07