2008-11-05 113 views
2

我有一个ASP.Net MVC Ajax.BeginForm提交和更新我的页面,当我点击提交按钮正确。其他jQuery事件提交我的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() }); 

任何想法关于如何让这些额外的事件触发onsubmit就像我需要它呢?

回答

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

+0

.ajaxForm()不再存在于jQuery中,或从来没有。 – Brettski 2009-07-22 03:39:29

+4

阅读我的文章 - ajaxForm是我在帖子中提到的jQuery.Form插件。 http://malsup.com/jquery/form/感谢您的投票! – Slee 2009-10-02 02:39:01

0

这是目前Beta版MVC中的一个棘手问题。您不能使用“submit()”函数,因为它不会触发onsubmit处理程序。相反,你应该直接调用onsubmit处理程序。唯一的技巧是当你调用它的时候,你需要传递一个参数给onsubmit()。这个参数是什么变成了处理程序中的“event”参数(请参阅“新的Sys.UI.DomEvent(event)”部分)。当你单击Submit按钮时,MVC Ajax脚本将使用“event”参数来取消默认行为,以便Ajax内容可以不间断地发生。

所以,如果你改变你的代码,以这样的:当表单字段改变

$("#ShippingType, #ViewCart .ddl").bind("change", function() { $("#ViewCartPage form").onsubmit({ preventDefault: function() {} }) }); 

的的onsubmit()事件将被触发。该代码创建一个实现了preventDefault()方法(这是MVC Ajax帮助程序唯一使用的方法)的“假”事件对象,因此您不会收到错误。

+0

似乎只是完全停止表单提交,并且从不触发AJAX调用 – Slee 2008-11-05 16:16:10

0

变化 -

bind("change", function() { $("#ViewCartPage form").submit() }); 

到 -

bind("change", function() { $("#ViewCartPage form").onsubmit() }); 
+0

由于onsubmit不是表单的函数或属性,所以不起作用。 – Slee 2008-11-17 20:46:44

3

微软很可能会打破我们,但:

function SubmitMvcAjaxForm(formName) { 
    eval('var event = new Object(); event.type="keypress"; ' + document.forms[formName].attributes["onsubmit"].value.replace('(this,', '(document.forms["' + formName + '"],')); 
} 
0

我使用Sichbo在MVC2的答案,但我发现,与MVC3您不再需要这些解决方法(即$('#yourformid')。submit();现在可以用于ajax调用)。