2011-05-30 139 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