【问题标题】:MVC 4, Jquery Mobile, Ajax.BeginForm causing forms to submit twiceMVC 4、Jquery Mobile、Ajax.BeginForm 导致表单提交两次
【发布时间】:2023-03-18 22:28:02
【问题描述】:

有没有人知道任何错误或其他见解来解释为什么将 MVC4 与 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 没有出现任何这些问题。

我已经坚持了几天了,所以任何帮助都将不胜感激

【问题讨论】:

  • 在不引用 Microsoft*.js 文件的情况下尝试一下。从 MVC3 开始,不显眼的验证和 Ajax. 助手不需要它们。
  • 感谢 nemesv 的回复。不幸的是,删除 Microsoft*.js 文件并不能解决这个特定问题

标签: ajax jquery jquery-mobile asp.net-ajax asp.net-mvc-4


【解决方案1】:

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 属性添加到它们发布到的服务器端文件中。

【讨论】:

    猜你喜欢
    • 2017-08-29
    • 1970-01-01
    • 2014-11-03
    • 2013-01-18
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多