標準のASPMVC4フォームがあり、ユーザーは詳細を編集して[承認]または[拒否]をクリックすると、ポストバックが発生します。
コントローラーがポストバックでモデルを受け取ったときに、どのボタンがクリックされたかを知るにはどうすればよいですか?
私はこれを行うための標準的な方法を探しているので、プロジェクトに取り組んでいる次の開発者を不思議に思うことはありません。
編集私はスタンドポストを使用しています、
標準のASPMVC4フォームがあり、ユーザーは詳細を編集して[承認]または[拒否]をクリックすると、ポストバックが発生します。
コントローラーがポストバックでモデルを受け取ったときに、どのボタンがクリックされたかを知るにはどうすればよいですか?
私はこれを行うための標準的な方法を探しているので、プロジェクトに取り組んでいる次の開発者を不思議に思うことはありません。
編集私はスタンドポストを使用しています、
各ボタンに名前(各ボタンで同じ)と値(各ボタンで一意)を付けます。
<button type="submit" name="button" value="approve">Approve</button>
<button type="submit" name="button" value="decline">Decline</button>
次に、ボタンに割り当てた名前と呼ばれる文字列パラメータをpostメソッドに追加します。
[HttpPost]
public ActionResult ProcessForm (Model model, string button)
{
//the parameter 'button' will contain the value of the button clicked - either 'approve' or 'decline'
}
すべてのhtml形式で取り組んできたトリッキーな質問。ポストバックする必要のあるデータの正確な量に帰着する可能性があります...モデルを特定するだけで、実際にフォームデータを作成する必要がない場合は、異なるコントローラーにポストする2つの異なるフォームを使用して簡単に実現できます。 :次の開発者にとって非常に透明で明確です:
<div class="container">
<form method="POST" action="/approve/123">
<input type="submit">
</form>
<form method="POST" action="/decline/123">
<input type="submit">
</form>
<div>
または、フォームデータをポストバックする必要がある場合は、クライアント側のonclickイベントを各ボタンに添付して、それに応じてフォームアクションを更新します。ただし、これは次の開発者にとっては明確ではありません...
<div class="container">
<form method="POST" action="/">
<input type="submit" value="Accept" id="btn-accept">
<input type="submit" value="Decline" id="btn-decline">
</form>
</div>
$(function(){
$("#btn-accept").click(funcion(e)({
e.preventDefault();
$("form").attr("action", "/approve");
$("form").submit();
}));
$("#btn-decline").click(funcion(e)({
e.preventDefault();
$("form").attr("action", "/decline");
$("form").submit();
}));
});
私が最も簡単だと思うのは
、拒否ボタンの入力のタイプをsubmit
からbutton
これに変更しても、コントローラーにポストバックされないことです。その後、数行のコードでユーザーを他のページにリダイレクトできます。
「承認」または「拒否」の権利に対して、2つの別々の「アクション」を実行する必要がありますか?
コントローラに承認アクションとコントローラに拒否アクションがあるので、これら2つのビジネスプロセスを1つのコントローラアクションで処理しようとするのではなく、自分のアクションに投稿できます。
これにより、各アクションの原因が明確になります。