<div class=".parentForm'>
@Ajax.BeginForm(... AjaxOptions { OnSuccess = "submitSuccess" })
{...}
</div>
function postDone(result,two, three) {
$('.parentForm').replaceWith(result);
}
我不喜欢这个,因为如果这个部分中有多个表单,它们都会有相同的类,我宁愿不提出一些时髦的方案,我在服务器端生成一个ID并且必须通过它围绕着JS回调。
使用.ajax我可以使用this
来获取提交请求的表单,然后从那里获取父.formContainer。有没有办法获得使用OnSuccess提交表单的表单?
答案 0 :(得分:2)
实际上,您仍然需要修改jquery.unobtrusive-ajax.js
文件,这是一种更简单的方法。在第100行附近添加一行代码。我提供了相同的答案here
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文件本身进行更改,如果您希望添加此更改,请提升它!
答案 1 :(得分: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
}