我有一種感覺,我太「網絡形式」與此,但我會問無論如何。我在ASP.NET MVC項目中有一個表單,它有一些輸入字段和兩個按鈕。一個按鈕用於「過濾」其中一個列表框。另一個用於提交表單。我的觀點看起來是這樣的:允許ASP.NET MVC表單上的多個按鈕的最佳方式是什麼?
<%using (Html.BeginForm())
{%>
<%=Html.TextBox("SearchItems") %>
<input type="submit" name="Command" value="Find" />
<%=Html.ListBox("SelectedItems", new MultiSelectList(model.AvailableItems,"Id", "Name", model.SelectedItems))%>
//Some other form fields.
<input type="submit" name="Command" value="Send" />
<%} %>
我的行動看起來是這樣的:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index([Bind(Prefix = "")]SendMessageRequest model)
{
if (model.Command == "Find")
return SearchItems(model);
if (model.Command == "Send")
return Send(model);
throw new Exception("Invalid command.");
}
該工程─控制器選擇基於被點擊的按鈕正確的行動。但是,這並不理想,因爲輸入按鈕的值也是顯示的文本。如果我想翻譯這個應用程序,那麼這個行爲就會中斷。爲了解決這個問題,我可以使用<按鈕>,它允許文本和值有所不同。然而,這個應用程序是爲Pocket IE,顯然Pocket IE處理這些不同 - 它提交兩個命令的值,這打破了行動。
由於這是用於Pocket IE,我也挺爲我所用JavaScript做術語的限制。 Ajax已經出來,但是我可能會從按鈕的onClick中設置一個隱藏的字段。
所以,我的問題是,什麼是允許對一個MVC視圖多個按鈕的單一形式的最佳方式?或者,我是否應該以某種方式將我的觀點分解爲多種形式?
這也應該刪除的JavaScript支持 – 2008-12-17 23:28:52
問題與方法的問題是,在這種情況下,「搜索」形式必須是_inside_「發送」的形式,並在頁面上的所有值都必須堅持。在此解決方案中,如果用戶在發送表單中輸入了某些內容,然後搜索,則發送表單將失去其狀態(FireFox除外)。 – Daniel 2008-12-18 15:34:59