0

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

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

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

4

2 回答 2

0

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

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

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

局部视图:

@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")
于 2013-09-20T06:09:27.390 回答
0

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

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

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

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

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

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

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

  • formaction 属性仅适用于现代浏览器
  • 使用不显眼的 javascript 和“data-formaction”属性模拟 formaction 属性
于 2013-09-20T09:44:49.180 回答