ASP.Net MVC 4表单提交2个button/操作

我有一个ASP.Net和razor的forms。

我需要有两种方式提交表单:一个通过Edit操作,另一个通过Validate操作。

我应该怎么做呢?

我不介意使用JavaScript。

编辑:

使用自定义属性我得到这个错误。

当前在控制器types“InspecoesController”上对操作“Resultados”的请求在以下操作方法之间是不明确的:System.Web.Mvc.ActionResult Validar(System.Collections.Generic.ICollection 1[Waveform.IEP.Intus.Server.Web.ViewModels.ResultadoViewModel]) on type Waveform.IEP.Intus.Server.Web.Controllers.InspecoesController System.Web.Mvc.ActionResult Resultados(System.Collections.Generic.ICollection 1 [Waveform.IEP.Intus.Server.Web.ViewModel。 ResultadoViewModel])typesWaveform.IEP.Intus.Server.Web.Controllers.InspecoesController

这就是我们的应用程序:
属性

 public class HttpParamActionAttribute : ActionNameSelectorAttribute { public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) { if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase)) return true; var request = controllerContext.RequestContext.HttpContext.Request; return request[methodInfo.Name] != null; } } 

用它装饰的行动:

 [HttpParamAction] public ActionResult Save(MyModel model) { // ... } [HttpParamAction] public ActionResult Publish(MyModel model) { // ... } 

HTML /剃刀

 @using (@Html.BeginForm()) { <!-- form content here --> <input type="submit" name="Save" value="Save" /> <input type="submit" name="Publish" value="Publish" /> } 

提交button的name属性应与动作/方法名称匹配

这样你就不必在JavaScript中硬编码URL

你可以用jQuery来做,只需要把两个方法提交给不同的URL,比如用这个表单:

 <form id="myForm"> <%-- form data inputs here ---%> <button id="edit">Edit</button> <button id="validate">Validate</button> </form> 

你可以使用这个脚本(确保它位于视图中,以便使用Url.Action属性):

 <script type="text/javascript"> $("#edit").click(function() { var form = $("form#myForm"); form.attr("action", "@Url.Action("Edit","MyController")"); form.submit(); }); $("#validate").click(function() { var form = $("form#myForm"); form.attr("action", "@Url.Action("Validate","MyController")"); form.submit(); }); </script> 

如果您正在使用razor在asp.net中工作,并且您想要控制多个提交button事件,那么此答案将指导您。 例如,我们有两个button,一个button会将我们redirect到“PageA.cshtml”,而其他的则会将我们redirect到“PageB.cshtml”。

 @{ if (IsPost) { if(Request["btn"].Equals("button_A")) { Response.Redirect("PageA.cshtml"); } if(Request["btn"].Equals("button_B")) { Response.Redirect("PageB.cshtml"); } } } <form method="post"> <input type="submit" value="button_A" name="btn"/>; <input type="submit" value="button_B" name="btn"/>; </form> 

下面是一个很好的解释: ASP.NET MVC – 多个button的forms相同

用两个字来表示:
你可以在你的行动中分析提交的button的价值
要么
与您的ActionMethodSelectorAttribute (我个人比较喜欢和build议)的版本做单独的行动。

 <input type="submit" value="Create" name="button"/> <input type="submit" value="Reset" name="button" /> 

使用HTML5,您可以使用button[formaction]

 <form action="Edit"> <button type="submit">Submit</button> <!-- Will post to default action "Edit" --> <button type="submit" formaction="Validate">Validate</button> <!-- Will override default action and post to "Validate --> </form> 

我们可以有两种方式

在同一视图中有两个表单提交,并且在控制器上有两个操作方法,但是您需要提交所需的字段以将表单提交

这里给出的代码多个窗体中的多个提交button的视图asp.net mvc

要么

有2个或多个提交button说btnSubmit1和btnSubmit2并检查Action方法哪个button被点击使用代码

 if (Request.Form["btnSubmit1"] != null) { // } if (Request.Form["btnSubmit2"] != null) { // }