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 行周围添加一行代码。我在这里提供了相同的答案

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 回答