ASP.Net MVC 4表单,带有2个提交按钮/操作

Tia*_*oso 36 asp.net razor

我在ASP.Net和razor中有一个表单.

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

我应该怎么做呢?

我不介意使用JavaScript.

编辑:

使用自定义属性我得到此错误.

控制器类型'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.ICollection1 [Waveform.IEP.Intus.Server.Web. ViewModels.ResultadoViewModel])类型为Waveform.IEP.Intus.Server.Web.Controllers.InspecoesController

Ram*_*nas 73

这就是我们在应用程序中的含义:
属性

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

用它装饰的动作:


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

[HttpParamAction]
public ActionResult Publish(MyModel model)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

HTML /剃刀

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

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

这样您就不必在javascript中硬编码网址

  • 好.我已将我的名称重命名为ButtonNameActionAttribute:然后控制器看起来更清洁,触摸更明显. (3认同)
  • 您是否为表单设置了`action`属性值?`@using(Html.BeginForm())`应该就够了.这很奇怪,因为在写这篇评论的那一刻,我正在实现完全相同的东西,它只是起作用 (2认同)
  • 这很容易,但是当你在同一个控制器中有其他动作方法时,它会导致很多其他问题.更不用说视图和控制器之间的隐式契约(一个很大的禁忌).我选择了一个轻量级的JS函数,在提交之前更改表单操作,如下面的@ŁukaszW.pl (2认同)

Łuk*_*.pl 44

您可以使用jquery执行此操作,只需将两个方法提交给不同的URL,例如使用以下格式:

<form id="myForm">
    <%-- form data inputs here ---%>
    <button id="edit">Edit</button>
    <button id="validate">Validate</button>
</form>
Run Code Online (Sandbox Code Playgroud)

您可以使用此脚本(确保它位于视图中,以便使用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>
Run Code Online (Sandbox Code Playgroud)


Pir*_*hah 8

如果您使用剃须刀在asp.net中工作,并且您想要控制多个提交按钮事件.那么这个答案将指导您.让我们举个例子,我们有两个按钮,一个按钮会将我们重定向到"PageA.cshtml",其他按钮会将我们重定向到"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>
Run Code Online (Sandbox Code Playgroud)


Dim*_*ima 5

这是一个很好的eplanation: ASP.NET MVC - 同一形式的多个按钮

用两个词来表示:
你可以在你的行动中分析提交按钮的值,
或者
用你的版本ActionMethodSelectorAttribute(我个人喜欢并建议)单独行动.