實現多個按鈕提交

來源:互聯網
上載者:User

標籤:

有時我們需要在同一個Form表單中進行多個按鈕的提交,來完成不同的功能。因為MVC中一個表單預設只能提交到一個Action處理,相對比較麻煩。

1、使用用戶端指令碼

我們可以view中加上如下代碼:

<input type="submit" value="SubmitToAbout1" onclick=‘this.form.action="@Url.Action("About1")" ‘/><br /><input type="submit" value="SubmitToAbout2" onclick=‘this.form.action="@Url.Action("About2")" ‘/>

用來指示不同的按鈕點擊後跳轉到不同的Action。Action方法代碼如下:

public string About1(FormCollection collection){return collection["Title"];}public string About2(FormCollection collection){return collection["Title"];}

這樣就實現了點擊不同的按鈕跳轉到不同的方法中。

 

2、在Action中判斷按鈕的value值

在view中,不同的input標籤,定義相同的name,如下:

<input type="submit" value="SubmitToAbout1" name="action"/><input type="submit" value="SubmitToAbout2" name="action"/>

然後在Action方法中,擷取表單傳過來的資料,擷取name為action的value值,再根據value值去進行判斷。

[HttpPost]public ActionResult About(FormCollection collection){string action=collection["action"];if (action == "SubmitToAbout1"){ViewBag.action = "SubmitToAbout1";}else if (action == "SubmitToAbout2"){ViewBag.action = "SubmitToAbout2";}return View();}

此種方法我們可以做出改進,建立一個MultiButtonAttribute類,該類繼承ActionNameSelectorAttribute類,該類代碼如下:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]public class MultiButtonAttribute : ActionNameSelectorAttribute{public string MatchFormKey { get; set; }public string MatchFormValue { get; set; }public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo){bool state= controllerContext.HttpContext.Request[MatchFormKey] != null && controllerContext.HttpContext.Request[MatchFormKey] == MatchFormValue;return state;}}

其中view中代碼不變,還是

<input type="submit" value="SubmitToAbout1" name="action"/><input type="submit" value="SubmitToAbout2" name="action"/>

在控制器的Action中調用:

[HttpPost][MultiButton(MatchFormKey = "action", MatchFormValue = "SubmitToAbout1")]public string About1(FormCollection collection){return "SubmitToAbout1 clicked";}[HttpPost][MultiButton(MatchFormKey = "action", MatchFormValue = "SubmitToAbout2")]public string About2(FormCollection collection){return "SubmitToAbout2 clicked";}

這樣,點擊submit按鈕時,MultiButton會根據按鈕的name和value值跳轉到相應的執行方法。

 

3、判斷按鈕的name值

判斷按鈕的value值有很多不確定的因素,比如按鈕的value值可能會更加客戶的個人愛好而進行改動,或者按鈕需要改成多語言版本的,這時我們根據按鈕的value值來選擇不同的控制器的Action時就顯得極其不靈活,這時我們希望通過按鈕的name值來選擇其相應的Action方法。同樣還是自訂一個MultiButtonAttribute類,該類繼承ActionNameSelectorAttribute類,該類代碼為:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]public class MultiButtonAttribute : ActionNameSelectorAttribute{public string MatchFormValue { get; set; }public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo){bool state = !string.IsNullOrEmpty(MatchFormValue) && controllerContext.HttpContext.Request.Form.AllKeys.Contains(this.MatchFormValue);return state;}}

視圖上按鈕代碼為:

<input type="submit" value="SubmitToAbout1" name="about1"/><input type="submit" value="SubmitToAbout2" name="about2"/>

控制器Action代碼:

[HttpPost][MultiButton(MatchFormValue = "about1")]public string About1(FormCollection collection){return "SubmitToAbout1 clicked";}[HttpPost][MultiButton(MatchFormValue = "about2")]public string About2(FormCollection collection){return "SubmitToAbout2 clicked";}

這樣就可以根據不同的按鈕的name,控制器來執行其相應的方法了。

實現多個按鈕提交

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.