【问题标题】:Default form submit behavior seems different between MVC2 and MVC3MVC2 和 MVC3 之间的默认表单提交行为似乎不同
【发布时间】:2011-06-27 16:36:30
【问题描述】:

在 MVC2 中,如果我在表单中有一个文本框和一个提交按钮(挂钩到 javascript/ajax 调用),按下回车键会自动触发提交按钮的 javascript 方法。然而,在 MVC3 Razor 中,按 Enter 键通常会发布表单,而不是执行 Ajax 请求。 MVC2 和 Razor 之间存在差异的任何原因?

编辑:基本上,当我按下回车键时,我得到了“文件另存为”对话框,当我保存文件并打开它时,文件的内容具有响应字符串。

【问题讨论】:

    标签: jquery .net asp.net asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    如果您使用任何Ajax.* 帮助程序(例如Ajax.BeginFormAjax.ActionLink),您需要删除所有Microsoft*.js 脚本并将它们替换为:jquery.unobtrusive-ajax.js,如下所示:

    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
    

    原因是,从 ASP.NET MVC 3 开始,微软意识到重新发明轮子从来都不是一件好事,因此弃用了他们的 MsAjax 脚本库,转而使用更高级和更好的 jQuery 库。所以这些脚本不再使用(它们只是为了向后兼容而提供的)。 ASP.NET MVC 3 Ajax.* 助手使用 HTML5 data-* 属性,这些属性通过 jQuery 进行了不显眼的 AJAX 化。

    您还应该确保在您的 web.config 中启用了不显眼的 AJAX:

    <appSettings>
        ...
        <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    

    如果您仍然想要向后兼容或其他东西,您可以将 UnobtrusiveJavaScriptEnabled 属性设置为 false,这将回退到以前的 Microsoft*.js 库(绝对不推荐)。

    同样适用于客户端 javascript 验证:jquery.validate 插件默认使用在输入字段上生成的不显眼的 HTML5 data-* 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2016-01-02
      • 2010-10-14
      • 2012-03-16
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      相关资源
      最近更新 更多