web-dev-qa-db-ja.com

2つの送信ボタン/アクションを備えたASP.Net MVC 4フォーム

ASP.Netとカミソリにフォームがあります。

上記のフォームを送信するには2つの方法が必要です。1つはEditアクションを実行する方法、もう1つはValidateアクションを実行する方法です。

これを行うにはどうすればよいですか?

これにJavaScriptを使用しても構いません。

編集:

カスタム属性を使用すると、このエラーが発生します。

コントローラータイプ「InspecoesController」のアクション「Resultados」に対する現在の要求は、次のアクションメソッド間であいまいです。System.Web.Mvc.ActionResult Validar(System.Collections.Generic.ICollection1[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

36
Tiago Veloso

それが私たちのアプリケーションにあるものです:
属性

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/Razor

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

name送信ボタンの属性はアクション/メソッド名と一致する必要があります

この方法では、JavaScriptでURLをハードコーディングする必要はありません

73
Ramunas

あなたはjqueryでそれを行うことができます、例えばこのフォームで異なるURLに提出するための2つのメソッドを置くだけです:

<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>
44
ŁukaszW.pl

あなたがカミソリでasp.netで作業していて、複数の送信ボタンイベントを制御したい場合は、この答えがあなたをガイドします。たとえば、2つのボタンがあるとします。1つのボタンは「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>
8
Pir Fahim Shah

ここに良い説明があります: ASP.NET MVC –同じ形式の複数のボタン

2語で:
Youtアクションで送信されたボタンの値を分析できます
または
お使いのバージョンのActionMethodSelectorAttributeで個別のアクションを実行します(個人的にはこの方法をお勧めします)。

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

.

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

            return View();
        }
3
Jeetendra Negi

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>
3
Andreas Ågren

これには2つの方法があります。

同じビュー内に2つのフォーム送信があり、コントローラーに2つのアクションメソッドがありますが、配置するフォームとともに必須フィールドを送信する必要があります。

exはコードでここに与えられます 複数の送信ボタンを持つビューasp.net mvcの複数のフォーム

または

2つ以上の送信ボタンでbtnSubmit1とbtnSubmit2を言い、コードを使用してどのボタンがクリックされたかをアクションメソッドで確認します。

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