1
<div class=".parentForm'>
    @Ajax.BeginForm(... AjaxOptions { OnSuccess = "submitSuccess" })
    {...}
</div>

function postDone(result,two, three) {
   $('.parentForm').replaceWith(result);
}

このパーシャルから複数のフォームがある場合、それらはすべて同じクラスを持つため、これは好きではありません。サーバー側で ID を生成し、それをJS コールバック。

.ajax を使用しthisて、リクエストを送信したフォームを取得し、そこから親の .formContainer を取得できます。OnSuccess でフォームを送信したフォームへの参照を取得する方法はありますか?

4

2 に答える 2

2

ファイルを変更する必要がありますが、実際にはもっと簡単な方法がありjquery.unobtrusive-ajax.jsます。100 行目あたりに 1 行のコードを追加します。ここで同じ回答を提供しました

options.data.push({ name: "X-Requested-With", value: "XMLHttpRequest" });

options.context = element; // <--- Add this line

method = options.type.toUpperCase();
if (!isMethodProxySafe(method)) {
    options.type = "POST";
    options.data.push({ name: "X-HTTP-Method-Override", value: method });
}

更新: AaronLS は codeplex で問題を作成し、jQuery Unobtrusive Ajax ファイル自体に変更を加えるかどうかを確認しました。この変更も追加したい場合は賛成してください!

Codeplex の問題: 'this' がソース要素を参照するようにする

于 2013-02-01T21:59:41.400 に答える
1

もちろん、jquery.unobtrusive-ajax.js ファイルを変更する必要があります。次の行を置き換える必要があります。

success: function (data, status, xhr) {
    asyncOnSuccess(element, data, xhr.getResponseHeader("Content-Type") || "text/html");       
    getFunction(element.getAttribute("data-ajax-success"), ["data", "status", "xhr"]).apply(this, arguments);
},

と:

success: function (data, status, xhr) {
    asyncOnSuccess(element, data, xhr.getResponseHeader("Content-Type") || "text/html");
    var args = $.merge(arguments, [element]);
    getFunction(element.getAttribute("data-ajax-success"), ["data", "status", "xhr"]).apply(this, args);
},

その方法でフォームにアクセスできます:

function submitSuccess(result, status, xhr, element) {
    // element is your form
}
于 2013-02-01T21:50:25.133 に答える