【发布时间】:2014-11-19 05:42:46
【问题描述】:
切换到 ASP.NET MVC 后,我再也不需要向控制器操作发送 JSON 对象,因此我可以轻松地使用 jqeury.post 进行 AJAX 调用。所有的动作方法都只是接收原始类型。但是最近我不得不发送一个 JSON 对象,所以我这样做了:
$.post(myUrl,JSON.stringify({param1:myJsonObject}),success(data){...},'json');
当我在动作方法的开头放置一个断点时,令我惊讶的是,我发现接收到的对象的所有属性都是空的。但是,如果我在发送之前不“JSON.stringify”对象,我可以正确获取字符串属性,但那些具有 DateTime 类型的总是 01.01.0001..
现在,如果我尝试,可以说,老式的方式,一切都会好起来的:
$.ajax({
url: myUrl,
type: 'POST',
data: JSON.stringify({param1:myJsonObject}),
contentType: 'application/json',
dataType: 'json',
success: function (data) {
//any code
}
});
所有属性都设置为正确的值。看了jquery.post的源码,发现没有设置contentType,所以设置为application/json。但这也无济于事。 jquery 版本是 1.8.2。你知道出了什么问题吗?
【问题讨论】:
-
JSON.stringify({param1:myJsonObject})应该看起来像{ param1: JSON.stringify(myObject) } -
您如何发送
DateTime值。如果它在服务器上的01/01/0001,那么它表明你发送的值无效,因此不绑定所以它是默认的(DateTime.Min)值 -
不,如果我在 Chrome 脚本调试器中调试它,我可以看到日期是有效日期。除此之外,我还测试了单独发送该日期,没有这样的问题。因此,如果该日期在对象内部,则不正确,但如果它是单独的参数,则很好。
-
@johan,我试过了,没用。除此之外,我对 $.ajax 版本做同样的事情并且工作得很好
-
如果你发回一个代表你的模型的javascript对象(例如
{id: 1, name: 'Mike', BirthDate: '1/1/1970' },那么如果action方法接受模型作为参数,它只需要$.post(myUrl, myJsonObject)。
标签: jquery ajax asp.net-mvc json asp.net-mvc-4