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) { // }