2010-10-14 116 views
20

我正在使用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日期传递到服务器,以便他们可以正确解析?

感谢,

+0

是否有任何理由您使用JSON.stringify?那次电话会议之前的价值是什么? – Jab 2010-10-14 16:11:01

+0

定期javascript日期。我认为我在看的演示使用了JSON.stringify,但是我真的认为没有真正的理由使用它。 – Sergio 2010-10-14 21:32:08

回答

48

你不应该JSON编码的日期与stringify因为默认模型联编程序不会期望JSON。试试这个:

$.post('/planner/GetPlannerEvents', { start: start.toUTCString(), 
    end: end.toUTCString() }, function (result) { 
    callback(result); 
}); 
+1

再次达林,你让我的一天! – Samuel 2012-08-17 18:52:49

+1

可能值得注意的是控制器需要一个字符串参数而不是DateTime。 – 2012-12-06 11:16:25

+0

我希望这个答案有更多的选票。有点难以在堆栈中过滤MVC控制器的问题。不能相信toUTCString()是答案。道具! – tranceporter 2013-05-13 08:18:57

-5

您需要使用的返回类型1JsonResult1s而不是1ActionResult1s

你的代码去财产以后这样

public JasonResult(DateTime start, DateTime end) { 
    //some logic 
    return Json(); // you can pass any values within Json() with new keyword 
} 
+2

谢谢,但json的结果是一个行动结果 – Sergio 2010-10-14 15:32:10

7

尝试使用date.toISOString()将数据传递到服务器。它以ISO8601格式返回字符串。此方法也可用于格式化在uri中使用的日期。

$.post('/planner/GetPlannerEvents', { start: start.toISOString(), 
    end: end.toISOString() }, function (result) { 
    callback(result); 
}); 

为什么toISOString要好于toUTCString
toUTCString转换为UTC时区中的人类可读字符串
toISOString转换为通用ISO格式它允许解决与区域设置和不同格式的问题。

+0

完全同意ISO在具有不同本地化设置的不同机器上比UTC更可靠和一致。 – MazBros 2015-12-10 14:27:44

0

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", 
}) 
相关问题