2016-06-12 75 views
0

我創建一個表單像這樣的下拉:MVC Html.BeginForm不同的URL模式

@{ 
    Html.BeginForm("View", "Stations", FormMethod.Get); 
} 
@Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name"), new { onchange = "this.form.submit();" }) 
@{ 
    Html.EndForm(); 
} 

如果讓我選擇從我的下拉列表中值我重定向到正確的控制器,但該網址是不是我想擁有它?

/站/視圖id = f2cecc62-7c8c-498d-b6b6-60d48a862c1c

我要的是:

/站/查看/ f2cecc62-7c8c-498d-b6b6-60d48a862c1c

那麼,如何獲得ID =查詢參數由更簡單的URL方案我要更換?

+0

你不能。你的瀏覽器對你的路由配置一無所知。帶有FormMethod.Get的表單總是會將其控件的值作爲查詢字符串值回傳(除非您使用javascript來攔截提交併構建自己的url) –

+0

好的,謝謝。如果您以答覆形式發佈此信息,我會接受該解決方案。 :) – DARKHalf

回答

0

@Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name"), new { onchange = "this.form.submit();" }) 
+0

和我應該使用什麼名稱而不是「id」? – DARKHalf

+0

到目前爲止,我知道名稱不是強制性的。正如你已經定義了一個表單的名字。該字段的名稱將被默認分配。 –

+1

對不起,但是此參數是強制性的。在所有變化中。 – DARKHalf

2

刪除「id」 與FormMethod.Get表單總是會回來後它的形式控件查詢字符串值的值。瀏覽器無法根據您的路由配置生成網址,因爲它們是服務器端代碼。

如果你真的想產生/Stations/View/f2cecc62-7c8c-498d-b6b6-60d48a862c1c,那麼你可以使用JavaScript/jQuery來建立自己的網址和重定向

@using (Html.BeginForm("View", "Stations", FormMethod.Get)) 
{ 
    @Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name")) 
} 

var baseUrl = '@Url.Action("View", "Stations")'; 
$('#id').change(function() { 
    location.href = baseUrl + '/' $(this).val(); 
}); 

邊注:提交的.change()事件不是預期的行爲,是混淆到用戶。建議你添加一個按鈕,讓用戶做出選擇,檢查它,然後提交表單(處理按鈕的.click()事件,而不是下拉列表的.change()事件)

+1

如果您要求我添加一個答案,以便您可以接受答案,那麼至少應該有禮貌地這麼做。 –