Microsoft use JavaScriptSerializer to serialize/desirealize the ASP.NET MVC data. If use /Date(utcDate)/
format for the Date
data type. Try to use
'"\/Date(' + myStory.Deadline.getTime() + ')\/"'
or
var d = myStory.Deadline;
var dateForMS = '"\/Date(' +
Date.UTC (d.getUTCFullYear(), d.getUTCMonth(),
d.getUTCDate(), d.getUTCHours(),
d.getUTCMinutes(), d.getUTCSeconds(),
d.getUTCMilliseconds()) + ')\/"'
You can also just use Sys.Serialization.JavaScriptSerializer
from MicrosoftAjax.js
to serialize Deadline
or any other Date
type.
UPDATED: Probably you should use '/Date('
and ')/'
instead of '"\/Date('
and ')\/"'
. All depends on where you will insert the string.
UPDATED 2: Now I have it! ASP.NET MVC is used mostly for the posting Form fields per Ajax. On the server side will be just used Parse
method for every type to convert the posted parameter to the type. So one can use any string format which are supported by DateTime.Parse. For example you can use ISO 8601 format like '2010-08-29T13:15:00.0000000Z'. To do this in modern browsers (firefox, chrome) one can use toISOString()
function. To be more independend one can implement data conversion like described in 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',
// ...
});
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…