我有一个ASP.Net MVC Ajax.BeginForm,当我点击提交按钮时,它正确地提交和更新我的页面。
问题是我需要额外的事件来做同样的事情,比如当他们改变输入的文本时。附加事件确实正确地提交了表单,但它们绕过了Ajax.BeginForm在表单标记上生成的onsubmit javascript。
这是Ajax.BeingForm:
生成的表单标记<form action="/Store/UpdateCart" method="post" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: 'updatedContent' });">
这是jQuery绑定我需要通过Ajax提交表单的其他事件:
$("#ShippingType, #ViewCart .ddl").bind("change", function() { $("#ViewCartPage form").submit() });
关于如何让这些额外事件触发提交的任何想法,如我也需要它?
答案 0 :(得分:10)
决定只使用常规表单然后使用jQuery.Form插件,这在2秒内完成!希望我原本可以走这条路。
var options = {
target: '#updatedContent', // target element(s) to be updated with server response
beforeSubmit: showRequest, // pre-submit callback
success: showResponse // post-submit callback
};
$('#ViewCartPage form').ajaxForm(options);
男人我喜欢jQuery
答案 1 :(得分:3)
微软可能会破坏我们,但是:
function SubmitMvcAjaxForm(formName) {
eval('var event = new Object(); event.type="keypress"; ' + document.forms[formName].attributes["onsubmit"].value.replace('(this,', '(document.forms["' + formName + '"],'));
}
答案 2 :(得分:0)
在当前的MVC Beta中,这是一个棘手的问题。您不能使用“submit()”函数,因为它不会触发onsubmit处理程序。相反,您应该直接调用onsubmit处理程序。唯一的技巧是你需要在调用时将参数传递给onsubmit()。这个参数成为处理程序中的“event”参数(参见“new Sys.UI.DomEvent(event)”部分)。当您单击“提交”按钮以使Ajax内容不会中断时,MVC Ajax脚本使用“event”参数来取消默认行为。
因此,如果您将代码更改为:
$("#ShippingType, #ViewCart .ddl").bind("change", function() { $("#ViewCartPage form").onsubmit({ preventDefault: function() {} }) });
当表单字段更改时,将触发onsubmit()事件。代码创建了一个“假”事件对象,该对象实现了preventDefault()方法(这是MVC Ajax助手使用的唯一方法),因此您不会收到错误。
答案 3 :(得分:0)
改变 -
bind("change", function() { $("#ViewCartPage form").submit() });
到 -
bind("change", function() { $("#ViewCartPage form").onsubmit() });
答案 4 :(得分:0)
我在MVC2中使用了Sichbo的答案,但我发现使用MVC3你不再需要这些变通方法(即$('#yourformid')。submit();现在可用于ajax调用。)