2012-06-10 53 views
5

有沒有人知道任何錯誤或其他見解來解釋爲什麼在jQuery Mobile中使用MVC4時,任何使用Ajax.BeginForm創建的表單都會導致表單向控制器提交兩次。MVC 4,Jquery Mobile,Ajax.BeginForm導致表單提交兩次

我原本想,既然我現在用的是JS捆綁,同樣的js文件可能已被列入兩次,可能會觸發表單提交,但是那不是的話,我的js文件列表如下:

jquery-1.6.4.js 
jquery-ui.1.8.11.js 
jquery.mobile-1.1.0.js 
jquery.unobtrusive-ajax.js 
jquery.validate.js 
knockout-2.0.0.js 
MicrosoftAjax.js 
MicrosoftMvcAjax.js 
MicrosoftMvcValidation.js 
Modernizr.js 

在項目中Ajax完全支持所有功能,即我不通過mobileinit禁用任何東西。

我還沒有發佈任何表單代碼,因爲它實際上發生在每一個表單上 - 一個表單有一個字段和一個提交按鈕會導致提交兩次 - 但只在使用Ajax.BeginForm的地方。

Html.BeginForm不會出現任何這些問題。

我一直停留在這個現在幾天,因此任何幫助,將默認爲HI-插孔不勝感激

+2

嘗試不引用「Microsoft * .js」文件。自MVC3以來,它們不需要用於不顯眼的驗證和'Ajax.'助手。 – nemesv

+0

感謝nemesv的回覆。不幸的是,刪除Microsoft * .js文件並沒有幫助解決這個特殊問題 –

回答

7

jQuery Mobile的任何形式的提交和執行它自己的AJAX請求。要停止此行爲,可以將data-ajax="false"屬性放置在任何<form>標記上。另外,還要確保停止形式的常規行爲,所以它不能正常提交,是這樣的:

$('#my-form').on('submit', false); 

文檔:http://jquerymobile.com/demos/1.1.0/docs/forms/forms-sample.html

你也可以只使用內置的jQuery Mobile的AJAX,而不是包括額外的JS。這隻需要您將表單的action屬性設置爲其發佈的服務器端文件。

+0

輝煌,非常感謝傑出的答案。 –

+0

@Jasper ...偉大的回答工作超棒:) –