MVCフォームメソッド= 'POST' 2つの送信ボタン
-
21-12-2019 - |
質問
ここにいくつかの投稿を解決しました。私は新鮮な質問をします。
私の形:
<form method="post" action="@Url.Action("Manage")" data-cs-ajax="true" data-cs-target="#catalogList" >
.
スコットアレンのオデトーフード例と非常に似た自動完全なフィールドとページングを持っています。
<input type="submit" value="Update" class="btn btn-default" />
.
選択された除去された項目を選択する - すべての作品 - すべての作品 - そしてまた:
<input type="submit" name="btnSave" id="btnSave" value="Save" class="btn btn-default" />
.
両方とも正常にヒットします。
//POST: /WebCatalog/Manage/5
[HttpPost, ActionName("Manage")]
[ValidateAntiForgeryToken]
public ActionResult Manage([Bind(Include = "Id,CatalogId,CatalogColourId,CatalogSizeId,CatalogCategoryId,CatelogSupplierId,StartDate,EndDate,Active,isSubmitted")] WebCatalogViewModel model, string searchTerm = null, int page = 1)
{ ...
.
JavaScriptのため、コントローラのアクションをヒットします。
$(function () {
var ajaxFormSubmit = function () {
var $form = $(this);
var options = {
url: $form.attr("action"),
type: $form.attr("method"),
data: $form.serialize()
};
$.ajax(options).done(function (data) {
var $target = $($form.attr("data-cs-target"));
var $newHtml = $(data);
$target.replaceWith($newHtml);
var options = {};
$newHtml.effect("highlight", options, 500, doneEffect);
});
return false;
};
.
今...
モデル内のフィールドを設定して、コントローラに2番目のBTNSaveボタンをクリックしたことを確認する...もちろんレコードを保存する....
SOO ...
$(function () {
$("#btnSave").click(function () {
$("isSubmitted").val("1");
return true;
});
});
.
とその火災:ajaxformsubmitでAjaxでページが送信される前に、$(#btnsave ")のボタンjQueryコードが正常に発生します。
しかし、コントローラのアクションでは、ISSUBMITEDは常に0です。
私は試してみました:
$("isSubmitted").val(1);
.
メソッド= 'get'と静止点のないフォームを試してみましたが、BTNSaveのJavaScriptを使用してメソッドを変更しようとする可能性があります。フォームコントロールで値を保存することはできません。その場合は、フォームメソッドを変更できるのでしょうか。
$ AJAX.ActionLinkを試しました - しかし常に500 IISエラーが発生しました。
基本的には、更新ボタンではなく、ユーザーが[保存]ボタンをクリックしたことを知る方法が必要です。
あらゆるアドバイスが高く評価されています!
解決
@Robert Achmann、これが私の答えです
セレクタは$( "ISSUBMITED")が欠けているようです。IDが存在する入力の$( "#issubmitted")。
他のヒント
クリックしたボタンをクリックしたコントローラに隠された値は必要ありません。あなたがする必要があるものは、次のように2つのボタンに名前を付けることです
<input type="submit" name="btnAction" value="Update" class="btn btn-default" />
<input type="submit" name="btnAction" value="Save" id="btnSave" class="btn btn-default" />
.
わかるように、それらは同じ名前ではなく異なる値(更新VS Save)を持ちます。
コントローラ内で、btnAction
という別のパラメータを追加します。これはボタンの名前である、アクションに追加します。
[HttpPost, ActionName("Manage")]
[ValidateAntiForgeryToken]
public ActionResult Manage(string btnAction, [Bind(Include = "Id,CatalogId,CatalogColourId,CatalogSizeId,CatalogCategoryId,CatelogSupplierId,StartDate,EndDate,Active,isSubmitted")] WebCatalogViewModel model, string searchTerm = null, int page = 1)
{
if(btnAction.ToLower() == "save")
{
// The save button was clicked
}
else if(btnAction.ToLower() == "update")
{
// The update button was clicked
}
else
{
// default ...
}
}
.
基本的に、パラメータbtnAction
は、フォームをトリガーする送信ボタンの値を取得します。
この助けを願っています。
フォームに隠されたフィールドをクリックすると、どのフィールドをクリックしたかを保存する(jQueryイベントハンドラを使用してこのjQueryイベントハンドラで制御)、type="subse"の代わりにボタンtype="button"にすることができます。あなたのjQueryコードからフォームを送信するために、またはeventPreventDefaultを使用することができます。
まあ、これはあなたを助けるかもしれないコードサンプルです:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$("#bt1").click(function(){
alert(' Save button');
$("#operation").val('save');
$("#frm").submit();
});
$("#bt2").click(function(){
alert(' Update button');
$("#operation").val('update');
$("#frm").submit();
});
});
</script>
</head>
<body>
<form id="frm">
<div id="div1"><h2> Form buttons - What of then was clicked? </h2></div>
<button id="bt1"> Save button </button>
<button id="bt2"> Update button </button>
<input type="hidden" id="operation" name="operation" value=""/>
</form>
</body>
</html>
.