2016-09-14 27 views
0

私はAjaxヘルパーを使用して、以下のようないくつかのフォームをWebサイト全体に作成しましたが、何らかの理由でこの単一フォームが2回送信されます。開発ツールの投稿がすぐに表示され、フォームが送信されているのがわかります。それらの間の唯一の違いは、最初のヘッダに追加のヘッダ(X-Requested-With:XMLHttpRequest)があることです。Ajax.BeginFormコントローラに2回ポストする(ASP.NET MVC5)

私はjquery.unobtrusiveファイルの要求が重複している可能性があることを示唆していますが、ソースと開発ツールをチェックして、単一のインスタンスしか見つけることができません。また、フォームを送信している可能性のある他のコードも見つかりません。

jquery.unobtrusiveライブラリを削除した場合、フォームはAJAXリクエストとしてではなく1回だけ送信されるため、このライブラリのどこかに問題が存在する必要があります。

私の見解は次のようになります。私のアクションは、このようになります

@using (Ajax.BeginForm("_Action", "Controller", null, new AjaxOptions 
{ 
    HttpMethod = "POST", 
    OnBegin = "beginFunc", 
    OnComplete = "completeFunc", 
    OnSuccess = "successFunc", 
    OnFailure = "failureFunc" 
}, 
new { id = "form-id", @class = "loading-container" })) 
{ 
    @Html.AntiForgeryToken() 
    <div class="form-input"> 
     @Html.EditorFor(m => m.PropertyName) 
     @Html.ValidationMessageFor(m => m.PropertyName) 
    </div> 
    <button type="submit" class="right-arrow">Submit</button> 
} 

:私のBundleConfig.csで

[HttpPost] 
[ValidateAntiForgeryToken] 
public JsonResult _Action(ViewModel vm) 
{ 
    // Method code goes here 
} 

私は誰もがいずれかを提供することができる

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery.validate.unobtrusive*", "~/Scripts/jquery.unobtrusive*")); 

を以下していますこれをデバッグする方法や私が確認できるものの他の提案?

+0

'OnBegin'などの機能は何ですか? –

+0

@AlanBuchananはこれを部分的に見ていますか?問題は、jquery.validate.unobtrusiveを複数回参照することによるものかもしれません。 – Sherlock

+0

@StephenMuecke OnBeginなどの関数は、ローダの追加などの視覚的な処理を行っています。 –

答えて

0

jquery-unobtrusive-ajax.jsが複数回ページに含まれている可能性があります。 は、フォームを複数回転記させています。

あなたは一度だけそれが含まれていることを確認する必要があります。

+0

ありがとうございますが、質問に記載されているとおり、私はすでにこれをチェックしており、一度だけ参照しています。 –

+0

@ AlanマスターレイアウトページとAjaxフォームを持っているビューを投稿してください。 –

0

あなたは、このチェックアウトのjQueryをuseingされることがわかっている場合:https://stackoverflow.com/a/5410121/3139083

を私はAjax.BeginFormといくつかの問題を抱えているとした後jQuery.post(への移行)、すべてがとても簡単になります。

関連する問題