mvc3传递按钮名称发布

时间:2012-03-10 02:40:37

标签: asp.net-mvc-3

按钮名称未传递给我的操作方法。

以下是我的观点(简化):

@using (Html.BeginForm("HandleSubmit", "Home", FormMethod.Post))
{    
    <input id="btnAddLineItem" type="submit" name="AddLineItem" value="AddLineItem" />
}

这是控制器方法:

[HttpPost, ActionName("HandleSubmit")]
public ActionResult HandleSubmit(int? id, string btnSubmit)
{
    switch (btnSubmit)
    {
        case "AddLineItem":
            break;
        case "AddNewOrder":
            break;
    }

    return View("OrderDetails");
}

btnSubmit值始终为null。我需要做些什么不同的事情?

2 个答案:

答案 0 :(得分:1)

name是绑定到您的方法签名的内容,而不是id

使用以下内容:

public ActionResult HandleSubmit(string AddLineItem, string AddNewOrder)
{
    /* ... code ... */

    if(!string.IsNullOrEmpty(AddLineItem)) {

    }
    else if(!string.IsNullOrEmpty(AddNewOrder)) {

    }

    /* ... code ... */
}

请记住,表单帖子会向服务器发送multipart/form-data name/value个{{1}}对集合。

答案 1 :(得分:0)

您没有以任何方式发送任何名称或价值的按钮ID。

我建议你制作一个具有以下两个属性的模型:

在get方法中创建模型的实例:

    public ActionResult HandleSubmit()
    {
        MyModel model = new MyModel();
        return View(model);
    }        

在post方法中,使用模型的属性来获取值。

    [HttpPost, ActionName("HandleSubmit")]
    public ActionResult HandleSubmit(MyModel model)
    {
        switch (model.Order)
        {
            case "AddLineItem":
                break;
            case "AddNewOrder":
                break;
        }

        return View("OrderDetails");
    }

您的观点可能如下所示:

@model MvcApplication3.Controllers.MyModel

@using (Html.BeginForm("HandleSubmit", "Home", FormMethod.Post))
{    
  @Html.EditorFor(x => Model.Order)
  <input id="btnAddLineItem" type="submit" name="AddLineItem" value="AddLineItem" />
}