【问题标题】: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.BeginForm 或Ajax.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-* 属性。