ASP.NET MVC - 将JSON DateTime传递给控制器​​而不映射到控制器参数

时间:2010-10-14 12:49:57

标签: javascript asp.net-mvc

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

谢谢,

4 个答案:

答案 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优于toUTCStringtoUTCString转换为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
}