您的Javascript / jQuery代码可以大大简化,这也许是最好的选择:
$(function () { $("#MyForm").on('submit', function (e) { e.preventDefault() // prevent the form's normal submission var dataToPost = $(this).serialize() $.post("Working/Save", dataToPost) .done(function(response, status, jqxhr){ // this is the "success" callback }) .fail(function(jqxhr, status, error){ // this is the ""error"" callback }) })})您应该处理
onsubmit表单的事件,而不是
onclick按钮的事件-
按钮以外的其他原因可能导致表单被提交。在这种情况下,由于我们要使用AJAX提交表单,因此我们想防止表单的默认提交行为。
.serialize()已经正确处理了表单的编码,因此您无需对表单值进行JSON编码。这样做很可能是Modelbinder在处理请求时未重建模型的原因。
$.post是一个辅助功能,用于包装您所需的常规设置工作
$.ajax-此处显示的版本希望将URL
POST到,并将数据POST到。如果您的jQuery代码在View的script元素中,则您可能要使用
Url.Action()帮助程序-
它会根据您的路由规则构建正确的URL。如果您选择走这条路线,则将使用类似于以下内容的内容:
$.post('@Url.Action("Save", "Working")', dataToPost)然后,我们使用相关的帮助程序来处理成功的响应(带有HTTP-200状态代码的任何内容)和失败的响应(基本上是其他任何内容)。你是什么 做
的那些助手最多是给你。



