部分视图MVC3中的多个提交按钮

时间:2013-09-19 23:10:46

标签: asp.net-mvc asp.net-mvc-3

我使用局部视图。在其中我有:

@using (Html.BeginForm("MyMethod", "MyController", FormMethod.Post))
{
<input type="submit" id="btn1" name="btnSubmit" value="Add record" />
<input type="submit" id="btn2" name="btnSubmit" value="Use record" />
}

然后在Controller [HttpPost]方法中我有:

[HttpPost]
public ActionResult MyMethod(string btnSubmit)
{
...
}

问题是btnSubmit始终为null。我试着直接调用这个局部视图,它返回正确的值。

知道怎么解决这个问题吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

我尝试执行你的代码,它可以正常工作,即直接调用Partial View或在另一个视图中调用它。

无法识别您的来源中的问题。我想你必须提供更多相关信息。

这是我在解决方案中尝试过的内容。您可以查看它对您有用吗

部分视图:

@using (Html.BeginForm("MyMethod", "Home", FormMethod.Post))
{
<input type="submit" id="btn1" name="btnSubmit" value="Add record" />
<input type="submit" id="btn2" name="btnSubmit" value="Use record" />
}

控制器:

        public ActionResult Index()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";

            return View();
        }

        public ActionResult MyMethod()
        {
            return PartialView();
        }

        [HttpPost]
        public ActionResult MyMethod(string btnSubmit)
        {
            return RedirectToAction("Index");
        }

并在索引视图中添加以下行:

@Html.Action("MyMethod")

答案 1 :(得分:0)

您正在考虑使用“ASP.NET Web Forms”方式,其中包含触发它们的元素信息的事件在MVC中没有这样的概念。

在MVC中,您需要拥有并调用不同的操作(控制器方法)来执行任何操作。此操作可以包含参数。如果此参数具有正确的名称,则它们将接收发布的数据。在您的情况下,您希望btnSubmit“自动”获取按钮的名称,但不会以任何方式发布。

您可以通过3种不同方式解决此问题:

  • 在表单中创建一个隐藏字段,并在单击提交按钮(onclick按钮事件)时填充所需信息。为了使其适用于您的示例,隐藏字段应具有btnSubmit名称。

  • 创建两个不同的操作,并使您的按钮将表单发布到不同的操作。您可以使用UrlHelper获取要发布的操作的网址。 (Url.Action方法)。

  • 在点击提交按钮

  • 中更改表单的操作属性

第二种解决方案涉及以下两种技术之一:

  • formaction attribute只能在现代浏览器中使用
  • 使用不引人注目的javascript和“数据形成”属性模拟形成属性