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

时间:2013-05-10 10:13:40

标签: 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.ICollection 1 [Waveform.IEP.Intus.Server.Web.ViewModels.ResultadoViewModel])类型为Waveform.IEP.Intus.Server.Web。 Controllers.InspecoesController

7 个答案:

答案 0 :(得分: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;
    }
}

用它装饰的动作:


[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" />
}
提交按钮的

name属性应与操作/方法名称匹配

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

答案 1 :(得分:44)

你可以用jquery来做,只需要提交两个方法来提交不同的URL,例如使用这种形式:

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

您可以使用此脚本(确保它位于View中,以便使用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>

答案 2 :(得分:8)

如果您使用razor在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>

答案 3 :(得分:5)

这是一个很好的eplanation: ASP.NET MVC – Multiple buttons in the same form

用2个词:
你可以在你的行动中分析提交按钮的价值 或
使用您的ActionMethodSelectorAttribute版本(我个人更喜欢并建议)进行单独操作。

答案 4 :(得分:3)

&#13;
&#13;
<input type="submit" value="Create" name="button"/>
<input type="submit" value="Reset" name="button" />
&#13;
&#13;
&#13;

在Controler中编写以下代码。

[HttpPost]
        public ActionResult Login(string button)
        {
            switch (button)
            {
                case "Create":
                    return RedirectToAction("Deshboard", "Home");
                    break;
                case "Reset":
                    return RedirectToAction("Login", "Home");
                    break;
            }

            return View();
        }

答案 5 :(得分:3)

With HTML5 you can use 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>

答案 6 :(得分:1)

我们可以通过两种方式实现这一目标,

要么在同一个视图中有2个表单提交,并且在控制器上有2个Action方法,但是您需要提交必填字段并将表单放在

ex在这里给出了代码Multiple forms in view asp.net mvc with multiple submit buttons

有两个或多个提交按钮说btnSubmit1和btnSubmit2并检查Action方法使用代码点击了哪个按钮

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