提交我的Ajax.BeginForm的其他jQuery事件
我有一个ASP.Net MVC Ajax.BeginForm,当我单击提交按钮时,它正确地提交和更新我的页面。
问题是我需要额外的事件来做同样的事情,比如当他们改变输入的文本时。 附加事件正确地提交表单,但它们绕过Ajax.BeginForm在表单标记上生成的onsubmit javascript。
这是Ajax.BeingForm生成的表单标记:
这里是jQuery来绑定我需要通过Ajax提交表单的其他事件:
$("#ShippingType, #ViewCart .ddl").bind("change", function() { $("#ViewCartPage form").submit() });
有关如何获取这些额外事件以触发提交的任何想法,我也需要它吗?
决定只使用常规表单然后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
微软可能会破坏我们,但是:
function SubmitMvcAjaxForm(formName) { eval('var event = new Object(); event.type="keypress"; ' + document.forms[formName].attributes["onsubmit"].value.replace('(this,', '(document.forms["' + formName + '"],')); }
这在当前的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助手使用的唯一方法),因此您不会收到错误。
改变 –
bind("change", function() { $("#ViewCartPage form").submit() });
至 –
bind("change", function() { $("#ViewCartPage form").onsubmit() });
我在MVC2中使用了Sichbo的答案,但是我发现使用MVC3你不再需要这些变通方法(即$(’#yourformid’)。submit();现在可用于ajax调用)。