提交我的Ajax.BeginForm的其他jQuery事件

时间:2008-11-05 14:34:01

标签: jquery asp.net-mvc

我有一个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() });

关于如何让这些额外事件触发提交的任何想法,如我也需要它?

5 个答案:

答案 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调用。)