【问题标题】:Multiple submit buttons in partial view MVC3部分视图MVC3中的多个提交按钮
【发布时间】:2013-09-20 17:44:49
【问题描述】:

我使用局部视图。在里面我有:

@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 始终为空。我尝试直接调用这个局部视图,它返回正确的值。

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

【问题讨论】:

  • 生成的 HTML 是什么样子的?
  • 我终于想通了。这是一个愚蠢的错误,在表单提交事件中,我确实返回 false 取消了提交事件,并且 btnSubmit 值因此没有通过。感谢所有帮助过的人。

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


【解决方案1】:

我尝试执行您的代码,无论是直接调用局部视图还是在另一个视图中调用它都可以正常工作。

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

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

局部视图:

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

【讨论】:

  • 感谢您的评论。在我的控制器操作中,我确实有: if (Request.IsAjaxRequest()) { return PartialView("_MyView", vm); } 返回视图(虚拟机);如果我直接调用此控制器而不从另一个控制器的视图中使用 ajax,因此它绕过 if 语句,在 [HttpPost] 方法中,我得到 btnSubmit 值没问题。问题是ajax请求吗?
  • 我尝试使用这两种方法调用局部视图,即 jQuery 和 Ajax。但它仍然适用于我。我用过 $("#div").load("/../Home/MyMethod", function () { });在 jQuery 和 $.ajax({ type: "GET", url: "/../Home/MyMethod", success: function (data) { $("#div").html(data); } });对于阿贾克斯
  • 我认为您的代码还有其他问题。您可以尝试再次检查您的调用方法。
【解决方案2】:

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

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

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

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

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

  • 在提交按钮 onclick 中更改表单的 action 属性

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

  • formaction attribute 仅适用于现代浏览器
  • 使用不显眼的 javascript 和“data-formaction”属性模拟 formaction 属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2021-01-10
    相关资源
    最近更新 更多