今天遇到在同一個View 上做兩種不同的submit action的問題。
後來發現下面這個方法,還滿實用&直覺的, 做一下筆記囉。
2.
定義一個可由DOM名稱對應到Action方法的Attribute:
public class HttpParamActionAttribute : ActionNameSelectorAttribute
{ public override bool IsValidName( ControllerContext controllerContext, string actionName, MethodInfo methodInfo) { if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase)) return true; var request = controllerContext.RequestContext.HttpContext.Request; return request[methodInfo.Name] != null; } } |
3.
實做兩個POST Actions,並加上步驟二的Attribute:
[icasH.Models.Attribute.HttpParamAction]
[HttpPost] public ActionResult Download() { // … } [icasH.Models.Attribute.HttpParamAction] [HttpPost] public ActionResult Query() { // … } |
4.
最後,我們在View中,將submit的Name設定和Controller的Action名稱一致。這樣就可以讓不同的Submit對應到各自的Action方法。
@using
(@Html.BeginForm())
{ <input type="submit" id="bt_download" name="Download" value="下載" /> <input type="submit" id="bt_query" name="Query" value="查詢" /> } |
PS. 注意DOM的name必須對應到Action Name。
5.
結束。
參考資料
沒有留言:
張貼留言