0

My Index に WebGrid があり、別々のアクションを実行するための 2 つの送信ボタンがあります。このコード
からの Webgrid 投稿でボタンがクリックされたときに、それぞれのアクションを指示する方法。 しかし、ボタンのいずれかで送信すると、最初の [HttpPost] アクションのみが呼び出されます。私のコード:

@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");
}

このリンクを使用して 2 つのアクションを呼び出してみました。ただし、コマンド値は呼び出されません。助言がありますか。
編集 :

  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 を使用しました。ただし、どちらのボタンをクリックしても、インデックス ビューに移動します。
私のコードに間違いはありますか??

4

1 に答える 1

1

クリックされたボタンを識別するActionMethodSelectorAttributeインターフェイスを使用する必要があります。詳細については、次のリンクを参照して くださいhttp://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx

于 2012-11-23T07:48:32.890 に答える