質問

ここにいくつかの投稿を解決しました。私は新鮮な質問をします。

私の形:

<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>
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top