Получить форму звонка в 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
}