2012-12-21 89 views
1

我有一個剃刀形式如何讓剃刀形式使用路線

using (Html.BeginForm("TermList", "Course", FormMethod.Get)) 
{ 

    <div style="text-align:right;display:inline-block; width:48%; margin-right:25px;"> 
      @Html.DropDownList("id", (SelectList) ViewBag.schoolId) 
    </div> 
    <input type="submit" value="Choose school" /> 
} 

我希望這種形式張貼到的URI:

http://localhost:56939/Course/TermList/764 

替代路線是這樣的:

http://localhost:56939/Course/TermList?id=764 

該路線未被使用。我想用參數

?id=764 
+0

我剛剛用一個簡單的重定向解決了這個問題http://stackoverflow.com/a/18105353/360211 – weston

回答

1

原因?id=764追加到URL是因爲你使用FormMethod.Get做掉。您將隨表單傳遞的任何值將添加到查詢字符串中。您需要使用FormMethod.Post

@using(Html.BeginForm("TermList", "Course", FormMethod.Post)) 
{ 
    ... Your form stuff here ... 
} 

這將導致http://localhost:56939/Course/TermList/

形式的行動。如果你想發佈到http://localhost:56939/Course/TermList/764你需要傳遞的Html.BeginForm聲明id參數:替代

@using(Html.BeginForm("TermList", "Course", new { @id = 764 }, FormMethod.Post)) 
{ 
    ... Your form stuff here ... 
} 

明顯的硬編碼764只是使用它存儲該值的任何變量。

+0

爲什麼使用post? 'http:// localhost:56939/Course/TermList/764'可以用GET來實現 – Yasser

+0

好的,我很欣賞你的觀點,但是選擇的值將來自下拉菜單。下拉值不會在渲染時被選中。 –

+0

@DaveA你想讓路由爲'http:// localhost:56939/Course/TermList /'或'http:// localhost:56939/Course/TermList/764'?如果您想要第一條路線,只要下拉列表中的名稱爲「id」,我發佈的第一個解決方案應該仍然有效。對於第二條路線,我可以更新我的答案,以顯示如何使用從下拉列表中選擇的值。 – HTX9