我使用部分视图。在其中我有:
@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属性