16

ASPMVCを3プレビューから3ベータにアップグレードした後、Ajaxフォームに奇妙な動作が見られます。

@using(Ajax.BeginForm("New", new AjaxOptions() {OnSuccess = "onAjaxSuccess", OnFailure = "onAjaxFailure", OnBegin = "onAjaxBegin", HttpMethod = "Post"})) {}

<form action="/Order/New" data-ajax="true" data-ajax-begin="onAjaxBegin" data-ajax-failure="onAjaxFailure" data-ajax-method="Post" data-ajax-success="onAjaxSuccess" method="post"></form>

alert関数内に配置しましたonAjaxBeginが、送信ボタンをクリックするたびに2回起動されます。

他の誰かがこの行動を見ましたか?アップグレード後にコードを変更していませんが、アップグレード前は完全に機能していました。

4

13 に答える 13

33

私は同じ問題を抱えていましたが、解決策を見つけました: " jquery.unobtrusive-ajax.min.js"-Scriptを 2 回含めました :-)

于 2011-07-14T15:56:13.827 に答える
14

生成されたHTMLを見てください。ASP.NET MVC 3 Betaでは、目立たないjqueryベースのajaxが新たにサポートされ、すべてのAjaxヘルパーがjqueryを使用するようになりました。たぶん、MSAjaxに何かが残っているのでダブルコールが発生します。ページからMSAjaxスクリプトのすべてのインクルードを削除してください。また、目立たないjqueryでAjax.BeginForm簡単に使用できるのになぜ使用するのですか?Html.BeginForm

于 2010-10-31T09:33:43.363 に答える
7

コントローラーがではなく をjquery.unobtrusive-ajax.min.js返す場合にも、重複が発生する可能性があります。View()PartialView()

于 2012-02-09T22:14:56.357 に答える
2

ご使用前に必ず1つの小さなヒントをお使い.live()ください。die():)
これにより、このイベントに関連付けられたすべての Java スクリプトが強制終了され、新しいスクリプトが作成されます。

例:

$(function() {
    $('#MyInfoForm').die();
    $("#MyInfoForm").live('submit', function(e) {
        //some code
        e.preventDefault();
    });
});
于 2011-05-10T21:33:44.603 に答える
1

jquery.unobtrusive-ajax.js私の場合、部分ビューの外に移動すると問題が解決しました。

于 2015-09-04T21:39:43.823 に答える
1

jquery.unobtrusive-ajax.min.jsbindの代わりに使用できます~~~これは非常に重要です。イベントは毎回前のイベントを呼び出しますが、現在のイベントのみを呼び出すためです。livelivebind

于 2011-03-19T03:46:21.003 に答える
0

私も同じ問題を抱えていました。を含むマスターページにログイン部分ビューがありましたjquery.unobtrusive-ajax.min.js。このファイルもビューに含めました。だから私は1つを削除し、問題は解決しました。

于 2013-01-22T06:30:52.113 に答える
0

私は解決策を見つけました.Ajax.BeginFormを使用しているため、通常はajaxを使用するため、すべてのjquery.unobtrusive-ajax.js参照を削除するだけです.

したがって、ajax を無効にする必要はありません。

于 2014-01-16T14:53:15.340 に答える
0

これは、私が持っているものと同様のシナリオを持っている人に役立つかもしれません:

私のページでは、編集フォームは Kendo UI モーダル ポップアップ ウィンドウ内に部分的なビューを開き、jquery.unobtrusive-ajax.js を含むフォームのコードを動的に読み込みます。この設定では、Kendo UI だけでなく、jQuery UI などのポップアップに関連する可能性があります。フォーム送信の動作は次のようになります。

ポップアップ ウィンドウが初めて開かれると、フォームの送信によって、コントローラー (サーバー側) コードが 1 回呼び出されます。ここまでは順調ですね。ただし、(コンテナー ページを閉じずに) ウィンドウが 2 回目に開かれると、フォームの送信によってコントローラーが 2 回呼び出されます。その後、ポップアップ ウィンドウを再度開くたびに、jquery.unobtrusive-ajax.js コードが追加で読み込まれます。これにより、フォームが 1 回送信されるたびに、コントローラーへの不要な呼び出しがさらに発生します。

この問題を解決するために、jquery.unobtrusive-ajax.js のインクルードをポップアップ ウィンドウの部分ビューからメイン ページに移動しました。ただし、これによりクライアント側の検証が機能しなくなりました。これを修正するために、ここで提供されているソリューションを使用しました: このブログ投稿にリンクする 動的に追加されたフィールドを使用したクライアント側の検証: http://xhalent.wordpress.com/2011/ 01/24/applying-unobtrusive-validation-to-dynamic-content/

于 2013-06-16T01:45:37.447 に答える
0

私もこの正確な問題を抱えていましたが、まったく別の理由でした。jquery.unobtrusive-ajax.min.js更新された div 内にへのスクリプト参照を含めました。divの外に移動すると修正されました。

于 2011-09-26T11:37:55.140 に答える