有時候會遇到這種情況:在一個表單上需要多個按鈕來完成不同的功能,比如一個簡單的審批功能。
如果是用webform那不需要討論,但asp.net mvc中一個表單只能提交到一個Action處理,相對比較麻煩點(diǎn)。
方法一:使用客戶端腳本
比如我們在View中這樣寫:
<inputtype="submit"value="審核通過"onclick='this.form.action="<%=Url.Action("Action1")%>/><inputtype="submit"value="審核不通過"onclick='this.form.action="<%=Url.Action("Action2")%> /><inputtype="submit"value="返回"onclick='this.form.action="<%=Url.Action("Action3")%>" />在點(diǎn)擊提交按鈕時,先改變Form的action屬性,使表單提交到按鈕相應(yīng)的action處理。
但有的時候,可能Action1和2的邏輯非常類似,也許只是將某個字段的值置為1或者0,那么分開到二個action中又顯得有點(diǎn)多余了。
方法二:在Action中判斷通過哪個按鈕提交
在View中,我們不用任何客戶端腳本處理,給每個提交按鈕加好name屬性:
<input type="submit" value="審核通過" name="action" /><input type="submit" value="審核不通過" name="action"/><input type="submit" value="返回" name="action"/>
然后在控制器中判斷:
[HttpPost] public ActionResult Index(string action /* 其它參數(shù)*/) { if (action=="審核通過") { // } else if (action=="審核不通過") {// } else { // } }幾年前寫asp代碼的時候經(jīng)常用這樣的方法…
View變得簡單的,Controller復(fù)雜了。
太依賴說View,會存在一些問題。假若哪天客戶說按鈕上的文字改為“通過審核”,或者是做個多語言版的,那就麻煩了。
方法三:使用ActionSelector
關(guān)于ActionSelector的基本原理可以先看下這個POST使用ActionSelector控制Action的選擇。
使用此方法,我們可以將控制器寫成這樣:
[HttpPost][MultiButton("action1")]public ActionResult Action1(){ // return View();}[HttpPost][MultiButton("action2")]public ActionResult Action2(){ // return View();}在 View中:
<input type="submit" value="審核通過" name="action1" /><input type="submit" value="審核不通過" name="action2"/><input type="submit" value="返回" name="action3"/>
此時,Controller已經(jīng)無須依賴于按鈕的Value值。
MultiButtonAttribute的定義如下:
新聞熱點(diǎn)
疑難解答
圖片精選