2012-11-23 38 views
0

我在我的索引中有一個WebGrid,並有兩個提交按鈕來執行單獨的操作。
Webgrid從這個code 如何直接點擊按鈕後的相應操作。
但是當我在任何按鈕上提交時,第一個[HttpPost]動作只被調用。 我的代碼:Webgrid中的多個提交按鈕MVC4

@using (Html.BeginForm()) 
{ 
    <fieldset> 
    <div id="CheckBoxDiv"> 
     @grid.GetHtmlWithSelectAllCheckBox(
      tableStyle: "grid", 
      checkBoxValue: "ProductID", 
      columns: grid.Columns(
       grid.Column(columnName: "ProductName"), 
       grid.Column(columnName: "Quantity"), 
       grid.Column(" ", " ", format: @<a href="@Url.Action("Index", "Edit", new { UserID = "12345", partnerid = "111" })">Edit</a>), 
       grid.Column(columnName: "Rate"), 
       grid.Column(columnName: "Price")     
      ) 
     ) 
    </div> 
    <p> 
     <input type="image" class="btn" name="command" value="Checkout" src="~/Images/Checkout.PNG" style="width: 62px; height: 25px;" /> 
     <input type="image" class="btn" name="command" value="Delete" src="~/Images/Remove.png" style="width: 62px; height: 25px;" /> 
    </p> 
    </fieldset> 
} 

* 控制器代碼*

[HttpPost] 
public ActionResult Index(string[] selectedRows) 
{ 
    for (int i = 0; i < selectedRows.Length; i++) 
    { 
     var objselected = selectedRows.ToList(); 
     SqlCommand scmd = new SqlCommand("SpCheckDetails", con); 
     scmd.CommandType = CommandType.StoredProcedure; 
     scmd.Parameters.AddWithValue("@userid", id); 
     scmd.Parameters.AddWithValue("@partnerID", partnerid); 
     scmd.Parameters.AddWithValue("@productID", objselected); 
     scmd.ExecuteNonQuery(); 
    } 
    return RedirectToAction("Index","Checkout"); 
} 

[HttpPost]  
public ActionResult Delete(string UserID, string partnerid, string productid) 
{ 
    return RedirectToAction("Index", "Cart"); 
} 

我用這個link調用兩個動作嘗試。但命令值不被調用。 任何建議。
編輯:

public ActionResult Index() 
     { 
      string id = "12345"; 
      string partnerid = "xxxxx"; 
      return View(_service.GetCartDetails(id,partnerid)); 
     } 
    [AcceptVerbs(HttpVerbs.Post)] 
    [AcceptParameter(Name = "Checkout")] 
    public ActionResult Index(string[] selectedRows, string button) 
    { 
      return View(); 
    } 
    [AcceptVerbs(HttpVerbs.Post)] 
    [AcceptParameter(Name = "Delete")] 
    public ActionResult Delete(string[] selectedRows,string UserID, string partnerid, string productid) 
    { 
      return View(); 
    } 

查看代碼

<input type="image" class="btn" name="Checkout" value="Checkout" src="~/Images/Checkout.PNG"/> 
<input type="image" class="btn" name="Delete" value="Delete" src="~/Images/Remove.png" /> 

我用ActionMethodSelectorAttribute用於獲取按鈕值。但它仍然會進入索引視圖,無論點擊哪個按鈕。
我的代碼中是否有任何錯誤。 ?

回答

1

您應該使用ActionMethodSelectorAttribute接口將識別哪個按鈕被點擊。欲瞭解更多信息請參閱以下鏈接 http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx

+0

我嘗試使用ActionMethodSelectorAttribute。但是這兩種行爲都沒有單獨調用。在這個例子中,他們使用按鈕來提交。但在我的情況下,我使用兩個圖像進行提交。那會是錯誤嗎? – kk1076

+0

沒有你給兩個提交按鈕不同的名稱?,如果讓我看一些代碼快照,以便我能找出什麼確切的問題會更好。 – Shivkumar

+0

由於我使用輸入類型作爲圖像,提交不會執行相應的操作。所以我改變我的輸入類型爲按鈕,並獲得輸出。 – kk1076