ASP.Netとカミソリにフォームがあります。
上記のフォームを送信するには2つの方法が必要です。1つはEdit
アクションを実行する方法、もう1つは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
それが私たちのアプリケーションにあるものです:
属性
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をハードコーディングする必要はありません
あなたは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>
あなたがカミソリで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>
ここに良い説明があります: ASP.NET MVC –同じ形式の複数のボタン
2語で:
Youtアクションで送信されたボタンの値を分析できます
または
お使いのバージョンのActionMethodSelectorAttribute
で個別のアクションを実行します(個人的にはこの方法をお勧めします)。
<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();
}
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>
これには2つの方法があります。
同じビュー内に2つのフォーム送信があり、コントローラーに2つのアクションメソッドがありますが、配置するフォームとともに必須フィールドを送信する必要があります。
exはコードでここに与えられます 複数の送信ボタンを持つビューasp.net mvcの複数のフォーム
または
2つ以上の送信ボタンでbtnSubmit1とbtnSubmit2を言い、コードを使用してどのボタンがクリックされたかをアクションメソッドで確認します。
if (Request.Form["btnSubmit1"] != null)
{
//
}
if (Request.Form["btnSubmit2"] != null)
{
//
}