2013年7月10日 星期三

[C#] MVC4 Form with 2 submit actions

今天遇到在同一個View 上做兩種不同的submit action的問題。
後來發現下面這個方法,還滿實用&直覺的, 做一下筆記囉。



1.      如下圖,同一個頁面有兩個submit按鈕。



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中,將submitName設定和ControllerAction名稱一致。這樣就可以讓不同的Submit對應到各自的Action方法。

@using (@Html.BeginForm())
{
 
<input type="submit"  id="bt_download" name="Download" value="下載" />
 
<input type="submit"  id="bt_query" name="Query" value="查詢" />
}

PS.
注意DOMname必須對應到Action Name

5.      結束。


參考資料


沒有留言:

張貼留言