Получить форму звонка в OnSuccess

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

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

Мне это не нравится, потому что если есть несколько форм из этого частичного, они все будут иметь один и тот же класс, и я бы предпочел не придумывать какую-нибудь прикольную схему, где я генерирую ID на стороне сервера и должен передавать его обратные вызовы JS.

С.ajax я могу использовать this чтобы получить форму, которая отправила запрос, затем оттуда получить родительский.formContainer. Есть ли способ получить ссылку на форму, которая отправила форму с помощью OnSuccess?

2 ответа

Решение

На самом деле есть более простой способ, хотя вам все равно придется изменить jquery.unobtrusive-ajax.js файл. Добавьте одну строку кода вокруг строки # 100. Я дал тот же ответ здесь

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, чтобы посмотреть, внесут ли они изменения в сам ненавязчивый Ajax-файл jQuery, добавьте его, если вы хотите, чтобы это изменение также было добавлено!

Проблема Codeplex: Пусть 'this' ссылается на элемент источника

Конечно, но вам нужно изменить файл 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
}
Другие вопросы по тегам