【问题标题】:Multiple submit buttons in Webgrid MVC4Webgrid MVC4中的多个提交按钮
【发布时间】:2012-11-11 13:14:39
【问题描述】:

我的索引中有一个 WebGrid,并且有两个提交按钮来执行单独的操作。
来自这个code的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");
}

我尝试使用这个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 来获取按钮值。但无论单击哪个按钮,它仍然会转到索引视图。
我的代码中是否有任何错误。 ?

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3 webgrid


    【解决方案1】:

    你应该使用 ActionMethodSelectorAttribute 接口来识别哪个按钮被点击。有关更多信息,请参阅以下链接 http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx

    【讨论】:

    • 我尝试使用 ActionMethodSelectorAttribute。但是这两个动作都没有单独调用。在示例中,他们使用按钮提交。但就我而言,我使用两张图片进行提交。那会是错误吗??
    • 没有,你给两个提交按钮都起了不同的名字吗?最好给我看一些代码快照,这样我就能找出确切的问题。
    • 由于我将输入类型用作图像,因此提交不会转到相应的操作。所以我将输入类型更改为按钮并获得了输出。
    • 哦,这是因为“IsValidForRequest”方法您从表单集合中获取了按钮名称,这就是它起作用的原因..
    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 2013-04-16
    • 2021-05-02
    • 2014-09-19
    • 2014-02-16
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    相关资源
    最近更新 更多