2010-08-27 113 views
4

我有一系列通过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... 

回答

5

微软使用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.JavaScriptSerializerMicrosoftAjax.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', 
    // ... 
}); 
+0

我试过原有的格式建议和更新之一,双方还没有到齐为空两者。他们被正确发布,但:截止日期\t“/ Date(1283169600000)/” – 2010-08-27 12:00:19

+0

似乎应该用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

+0

它只适用于我手动序列化数据为json的情况。 ** data:JSON.stringify(params),** – vsapiha 2012-02-20 14:07:21