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



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

@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" />
}

然后在控制器 [HttpPost] 方法中,我有:

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

问题是btnSubmit总是空的。我尝试直接调用此部分视图,它返回正确的值。

知道如何解决这个问题吗?提前谢谢。

我尝试执行您的代码,无论哪种方式都可以正常工作,即直接调用分部视图或在另一个视图中调用它。

无法识别源中的问题所在。我想你必须提供更多关于这方面的信息。

这是我在解决方案中尝试过的内容。你可以检查它是否对你有帮助

部分视图:

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

您正在考虑"ASP.NET Web 窗体"的方式,其中您有事件,其中包含有关触发它们的元素的信息 在 MVC 中没有这样的概念。

在 MVC 中,您需要为要执行的任何操作(控制器方法)设置和调用不同的操作(控制器方法)。此操作可以具有参数。如果此参数具有正确的名称,它们将收到发布的数据。在您的情况下,您希望btnSubmit"自动"获取按钮的名称,但这不会以任何方式发布。

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

  • 在表单中创建一个隐藏字段,并在单击"提交"按钮(onclick按钮事件)时,使用所需信息填充该字段。若要在示例中执行此操作,隐藏字段应具有btnSubmit名称。

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

  • 在"提交"按钮中更改表单的操作属性

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

  • 仅在现代浏览器中起作用的表单操作属性
  • 使用不显眼的JavaScript和"data-formaction"属性模拟formaction属性

最新更新