我使用局部视图。在其中我有:
@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。我试着直接调用这个局部视图,它返回正确的值。
知道怎么解决这个问题吗?提前谢谢。
答案 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
方法)。
在点击提交按钮
第二种解决方案涉及以下两种技术之一: