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',
// ...
});