Asp.net mvc 如何处理同一表单中的多个提交按钮

Asp.net mvc 如何处理同一表单中的多个提交按钮,asp.net-mvc,Asp.net Mvc,我是mvc的新手。我知道这样我可以在同一个表单中处理多个提交按钮 <% using (Html.BeginForm("LoginRegistration", new { action = "LoginRegistration", controller = "Register"}, FormMethod.Post, new { @class = "form", id = "formId" })) { %> //your html code here

我是mvc的新手。我知道这样我可以在同一个表单中处理多个提交按钮

<%
 using (Html.BeginForm("LoginRegistration", new { action = "LoginRegistration", controller = "Register"}, FormMethod.Post, new { @class = "form", id = "formId" }))
    {
     %>
        //your html code here
        <input type="submit" name="submitButton" value="Login"/>
        <input type="submit" name="submitButton" value="Register"/>
<% }%>

[HttpPost]
        public ActionResult LoginRegistration(string submitButton)
        {
            switch (submitButton)
            {
                case "Login":
                    return RedirectToAction("Login");
                case "Register":
                    return RedirectToAction("Register");
                default:
                    return null;
            }
        }
当我使用这样的语法时,我得到了一个错误

 public ActionResult MultipleSubmitBtn(string? b1, string? b2, string b3?, string b4?, string b5?) 

请检查你的代码并告诉我为什么它不工作。谢谢

在HTML5中,有一个名为
formaction
的新属性,您可以根据单击的按钮更改
表单的
action
属性

<input type='submit' formaction='/home/login' value='Login'>
<input type='submit' formaction='/home/register' value='Register'>
第二个变量对(名称为
Register
)的工作方式相同。如果未单击此按钮,则隐藏字段将成为“回退选项”

<button type="submit" name="register" value="true">Register</button>
<input type="hidden" name="register" value="false"/>
您需要使用
表单
中的
名称
属性才能工作。

编辑2:单击按钮时有关按钮的更多信息

如果你有5个按钮

<button type="submit" id="b1" value="true"> 1 </button>
<button type="submit" id="b2" value="true"> 2 </button>
<button type="submit" id="b3" value="true"> 3 </button>
<button type="submit" id="b4" value="true"> 4 </button>
<button type="submit" id="b5" value="true"> 5 </button>
由于b1、b2、b4和b5在我们单击b3时不会发送到服务器,而且由于操作方法需要它们,因此我们必须找到另一种发送它们的方式

一种方法是使用与按钮同名的隐藏字段。始终将隐藏字段发送到服务器。因此,通过在按钮后面添加这些字段,我们可以确保b1、b2、b3、b4和b5中的所有内容都被发送到服务器。如果我们点击b3,那么按钮的值将被使用,而不是隐藏字段

<input type="hidden" id="b1" value="false" />
<input type="hidden" id="b2" value="false" />
<input type="hidden" id="b3" value="false" />
<input type="hidden" id="b4" value="false" />
<input type="hidden" id="b5" value="false" />

因此,在这种情况下,即使只发送了
b3=true
,而其他所有的都没有发送,此操作方法也会起作用。

我知道回答有点晚,但我正在尝试……)

我相信更复杂的方法是使用ActionNameAttribute和自定义ActionMethodSelectorAttribute(源自ActionMethodSelectorAttribute)。它很容易实现

如果您希望访问以下链接:,

Html:

<input type="submit" value="Save" name="commandSave" />
<input type="submit" value="Approve" name="commandApprove" />

谢谢你的回答,但我需要一个通用的解决方案,适用于所有浏览器。你写了“所有其他方式”,所以我想介绍其中之一。但我同意HTML5现在有点太“新”了。谢谢你的回答。我想知道表单什么时候提交,只要点击任何按钮,然后我想知道哪个字段的值将传递给action方法。在表单中有两个字段,两个是按钮,两个是隐藏字段,但action方法需要两个参数,我不清楚。我期待着另一个解释。thanksu说“只能点击其中一个按钮。如果点击注册按钮,那么将使用登录的回退值。如果点击登录按钮,那么将使用注册的回退值。”这里的回退值是什么意思?这是web应用程序的一般行为还是mvc特有的只有隐藏字段值才会进入操作方法?谢谢你的回答,但事情还不清楚,为什么只有隐藏字段值会作为参数发送给action方法。假设我有一个表单,只有几个文本框和下拉列表等,当我单击submit按钮时,哪些值会传递给action方法?
<button type="submit" name="register" value="true">Register</button>
<input type="hidden" name="register" value="false"/>
<form name="myFormName" action="Login">
  <input type="submit" value="Login" />
  <input type="submit" onclick="document.myFormName.action='Register'" value="Register" />
<button type="submit" id="b1" value="true"> 1 </button>
<button type="submit" id="b2" value="true"> 2 </button>
<button type="submit" id="b3" value="true"> 3 </button>
<button type="submit" id="b4" value="true"> 4 </button>
<button type="submit" id="b5" value="true"> 5 </button>
[HttpPost]
public ActionResult LoginRegistration(string b1, string b2, string b3, string b4, string b5)
{
  ...
}
<input type="hidden" id="b1" value="false" />
<input type="hidden" id="b2" value="false" />
<input type="hidden" id="b3" value="false" />
<input type="hidden" id="b4" value="false" />
<input type="hidden" id="b5" value="false" />
<button type="submit" id="b1" value="true"> 1 </button>
<button type="submit" id="b2" value="true"> 2 </button>
<button type="submit" id="b3" value="true"> 3 </button>
<button type="submit" id="b4" value="true"> 4 </button>
<button type="submit" id="b5" value="true"> 5 </button>
[HttpPost]
public ActionResult LoginRegistration(string? b1, string? b2, string? b3, string? b4, string? b5)
{
  ...
}
<input type="submit" value="Save" name="commandSave" />
<input type="submit" value="Approve" name="commandApprove" />
if (Request.Form.ContainsKey("commandSave")) // do saveMethod
else if (Request.Form.ContainsKey("commandApprove")) // do approveMethod