传递给MVC Action的JSON Date参数始终为null

我有一系列参数通过jQuery Ajax传递给MVC JsonResult操作。 在大多数情况下,这些成功到达,但有一个Date值根本没有到达。

我需要使用哪些注意事项/格式 – 或者我需要采取哪些方法 – 才能使这个日期成功到达?

...other code ... myStory.Deadline = new Date($('#story-deadline').val()); $.ajax({ url: '/Project/' + action[2] + '/AddStory', data: { Summary: myStory.Summary, Size: myStory.Size, Priority: myStory.Priority, Owner: myStory.Owner, Deadline: myStory.Deadline }, dataType: 'json', traditional: true, type: 'POST', ...the rest of the code... 

JsonResult动作:

 [HttpPost] public JsonResult AddStory(int projectid, Story story) { ...some code that doesn't have a DateTime object to work with... 

Microsoft使用JavaScriptSerializer来序列化/期望ASP.NET MVC数据。 如果使用Date数据类型的/Date(utcDate)/格式。 尝试使用

 '"\\/Date(' + myStory.Deadline.getTime() + ')\\/"' 

要么

 var d = myStory.Deadline; var dateForMS = '"\\/Date(' + Date.UTC (d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()) + ')\\/"' 

您也可以使用MicrosoftAjax.js Sys.Serialization.JavaScriptSerializer来序列化Deadline或任何其他Date类型。

更新 :可能你应该使用'\/Date('')\/'而不是'"\\/Date('')\\/"' 。 全部取决于您将插入字符串的位置。

更新2 :现在我拥有它! ASP.NET MVC主要用于按Ajax发布表单字段。 在服务器端将只使用每种类型的Parse方法将发布的参数转换为类型。 因此可以使用DateTime.Parse支持的任何字符串格式。 例如,您可以使用ISO 8601格式,如“2010-08-29T13:15:00.0000000Z”。 要在现代浏览器(firefox,chrome)中执行此操作,可以使用toISOString()函数。 要更加独立,可以实现数据转换,如http://williamsportwebdeveloper.com/cgi/wp/?p=503中所述 :

 var d = new Date($('#story-deadline').val()) //var d = new Date(); // get the date. Here we use just Now. var dAsISOString; if ($.isFunction(d.toISOString)) { //alert("internal toISOString are used!"); dAsISOString = d.toISOString(); } else { dAsISOString = d.getUTCFullYear() + '-' + padzero(d.getUTCMonth() + 1) + '-' + padzero(d.getUTCDate()) + 'T' + padzero(d.getUTCHours()) + ':' + padzero(d.getUTCMinutes()) + ':' + padzero(d.getUTCSeconds())+'.'+ pad2zeros(d.getUTCMilliseconds()) + 'Z'; } var myStory = { Summary: 'Test description', Size: 8, Dedline: dAsISOString }; $.ajax({ url: '/Project/1/AddStory', data: { Summary: myStory.Summary, Size: myStory.Size, Dedline: myStory.Dedline }, dataType: 'json', // ... });