ASP.NET MVC-将JSON DateTime传递给未映射到控制器参数的控制器
我正在使用jQuery日历来显示事件,该事件旨在从服务器中获取数据。 在innit上,日历触发了一个AJAX请求来获取事件对象数组(json编码)。 目前为止都很好。 但是,这个请求包含一个JSON编码的日期和时间(在我的implimentation做的事情上)。 的代码看起来是这样的:ASP.NET MVC-将JSON DateTime传递给未映射到控制器参数的控制器
data: function (start, end, callback) {
$.post('/planner/GetPlannerEvents', { test: "test", start: JSON.stringify(start), end: JSON.stringify(end) }, function (result) { callback(result); });
}
为GetPlannerEvents控制器方法的声明如下所示:
public ActionResult GetPlannerEvents(DateTime start, DateTime end)
的问题是,asp.net MVC 2似乎无法自动解析JSON编码日期时间并因此抱怨开始和结束值为空。
是否有另一种方法,我应该使用JavaScript日期传递到服务器,以便他们可以正确解析?
感谢,
你不应该JSON编码的日期与stringify
因为默认模型联编程序不会期望JSON。试试这个:
$.post('/planner/GetPlannerEvents', { start: start.toUTCString(),
end: end.toUTCString() }, function (result) {
callback(result);
});
再次达林,你让我的一天! – Samuel 2012-08-17 18:52:49
可能值得注意的是控制器需要一个字符串参数而不是DateTime。 – 2012-12-06 11:16:25
我希望这个答案有更多的选票。有点难以在堆栈中过滤MVC控制器的问题。不能相信toUTCString()是答案。道具! – tranceporter 2013-05-13 08:18:57
您需要使用的返回类型1JsonResult1s而不是1ActionResult1s
你的代码去财产以后这样
public JasonResult(DateTime start, DateTime end) {
//some logic
return Json(); // you can pass any values within Json() with new keyword
}
谢谢,但json的结果是一个行动结果 – Sergio 2010-10-14 15:32:10
尝试使用date.toISOString()
将数据传递到服务器。它以ISO8601格式返回字符串。此方法也可用于格式化在uri中使用的日期。
$.post('/planner/GetPlannerEvents', { start: start.toISOString(),
end: end.toISOString() }, function (result) {
callback(result);
});
为什么toISOString
要好于toUTCString
? toUTCString
转换为UTC时区中的人类可读字符串。 toISOString
转换为通用ISO格式它允许解决与区域设置和不同格式的问题。
完全同意ISO在具有不同本地化设置的不同机器上比UTC更可靠和一致。 – MazBros 2015-12-10 14:27:44
date.toString
的变化不适用于我,直到我添加json标题的帖子。由此产生的代码如下:
var pstData = {
begDate: date1.toUTCString(),
endDate : date2.toUTCString()
};
$.ajax({
url:'url',
type:'POST',
data: JSON.stringify(pstData),
contentType: "application/json; charset=utf-8",
dataType: "json",
})
是否有任何理由您使用JSON.stringify?那次电话会议之前的价值是什么? – Jab 2010-10-14 16:11:01
定期javascript日期。我认为我在看的演示使用了JSON.stringify,但是我真的认为没有真正的理由使用它。 – Sergio 2010-10-14 21:32:08