传递给MVC的JSON日期参数操作始终为空
问题描述:
我有一系列通过jQuery Ajax传递给MVC JsonResult操作的参数。在大多数情况下,这些成功到达,但有一个日期值根本没有到达。传递给MVC的JSON日期参数操作始终为空
我需要使用哪些考虑因素/格式 - 或者需要采取哪些方法 - 才能使此日期成功到达?
...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...
答
微软使用JavaScriptSerializer序列化/ desirealize的ASP.NET MVC的数据。如果使用/Date(utcDate)/
格式为Date
数据类型。尝试使用
'"\\/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()) + ')\\/"'
您也可以只使用Sys.Serialization.JavaScriptSerializer
从MicrosoftAjax.js
连载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',
// ...
});
我试过原有的格式建议和更新之一,双方还没有到齐为空两者。他们被正确发布,但:截止日期\t“/ Date(1283169600000)/” – 2010-08-27 12:00:19
似乎应该用MVC的源代码测试问题(请参阅http://weblogs.asp.net/jacqueseloff/archive/2010 /04/20/mvc-2-source-code-released-to-microsoft-reference-server.aspx和http://aspnet.codeplex.com/releases/view/41742)。如果你有任何结果,请告诉我。 – Oleg 2010-08-27 14:28:57
它只适用于我手动序列化数据为json的情况。 ** data:JSON.stringify(params),** – vsapiha 2012-02-20 14:07:21