2008-11-05 98 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調用)。