MVC鼓勵使用RESTful URL,但HTML表單本質上是將數據附加到查詢字符串值中。我的動作將「文本」作爲字符串參數。而我的形式是:我該如何學會停止擔心並熱愛ASP.NET MVC Forms?
<% using(Html.BeginForm("Action", "Controller")) { %>
<%= Html.TextBox("text") %>
<input type="submit" value="submit" />
<% } %>
我的動作是:
public ActionResult Action(string text)
{
...
return toInnocence;
}
有兩種不同的URL,你的行動可以映射到:
~/Controller/Action/textvalue
感謝您的路線圖{控制器}/{action}/{text}~/Controller/Action?text=textvalue
從表單提交時
我的問題是:
如何區分兩種形式並在後一種情況下進行重定向?第二種形式打破了RESTful原則。那裏的最佳做法是什麼?我不想查詢RouteData.Values集合,因爲它以自然,直接的方式打破了將請求參數映射到函數參數的整個目的。這是一個非常基本的場景,我希望MVC能夠很好地處理這個問題。
第二種形式不映射到控制器操作中的「text」參數。爲什麼?我怎樣才能創建相同動作的重載版本呢?我是否必須創建一個新操作並將其用於表單提交?當然,我可以解決所有這些問題,但同時我害怕在某個地方錯過大局。
看起來好像人們相處得很順利,所以我覺得我是唯一一個被路由值與查詢字符串混淆的人。
編輯:我看着維基百科是如何做到這一點的。它針對「表單獲取者」和實際寧靜的URL使用單獨的操作,並根據需要從一個到另一個重定向。我想這將是最好的方式。
我不明白如果第一種形式不是第二種形式可能會違反REST。要麼他們都是,要麼都不是。 – qid 2009-12-15 16:13:18
如果查詢字符串完全描述了一個URL,爲什麼我們首先要有URL路由?我們可以與Controller.aspx?action = action&id = id表單相處嗎? – 2009-12-15 16:26:40