我正在使用jQuery日历来显示事件,这些事件旨在从服务器提取数据。 在innit上,日历会触发AJAX请求以获取事件对象数组(json编码)。 到目前为止都很好。 但是,此请求包含一个JSON编码的日期和时间(在我的实施中)。 代码如下所示:
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编码的datetime,因此抱怨start和end值为null。
我是否应该使用另一种方法将javascript日期传递给服务器,以便正确解析它们?
谢谢,
答案 0 :(得分:49)
您不应该使用stringify
对日期进行JSON编码,因为默认模型绑定器不期望JSON。试试这个:
$.post('/planner/GetPlannerEvents', { start: start.toUTCString(),
end: end.toUTCString() }, function (result) {
callback(result);
});
答案 1 :(得分:7)
尝试使用date.toISOString()
将数据传递到服务器。它以ISO8601格式返回字符串。此方法也可用于格式化在uri中使用的日期。
$.post('/planner/GetPlannerEvents', { start: start.toISOString(),
end: end.toISOString() }, function (result) {
callback(result);
});
为什么toISOString
优于toUTCString
?
toUTCString
转换为UTC时区中的人类可读字符串
toISOString
转换为通用ISO格式,可以解决区域设置和不同格式的问题。
答案 2 :(得分:0)
在我将json标题添加到帖子之前,date.toString
的变体对我不起作用。结果代码如下:
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",
})
答案 3 :(得分:-5)
你需要使用返回类型作为1JsonResult1s而不是1ActionResult1s
你的代码就像这样
public JasonResult(DateTime start, DateTime end) {
//some logic
return Json(); // you can pass any values within Json() with new keyword
}