2013-02-27 26 views
1

我有一个带日期的挖空视图模型。 Viewmodel包含一个包含多个BookingRows(orderRows)的CustomerOrder。这些视图模型中的每一个都有日期。我删除了大量数据的可读性:Knockout viewmodel date - > MVC 4查看模型在帖子中未转换

function ViewModel(data) { 
    var self = this; 
    self.CustomerOrder = ko.observable(data.CustomerOrder); 
    self.AllTreatments = data.AllTreatments; 
    self.AllTreatmentGroups = data.AllTreatmentGroups; 
    self.AllTreatmentRooms = data.AllTreatmentRooms; 
    ... 
    self.Save { 
     var dataToSave = ko.toJSON({ CustomerOrder: self.CustomerOrder }); 
     AjaxSaveCustomerOrder(dataToSave); 
    } 
} 

var CustomerOrder = function (data) { 
    var self = this; 

    .... 

    self.CustomerOrderDate = ko.observable(data.CustomerOrderDate); 
    self.Bookings = ko.observableArray($.map(data.Bookings, function(item) { 
     return new Booking(item); 
     }) || []); 
}; 

当我看到后,该日期为JSON发送日期是这样的:

CustomerOrderDate “:”/日期(1361981980121)/

它不被解析为我的viewmodel日期,它是一个DateTime。

任何sugestions如何做到这一点表示赞赏。

+1

JSON不执行日期。可能最容易将它们作为字符串传回,并使用客户端JavaScript解析它们。 (http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx) – paul 2013-02-27 16:48:16

回答

0

您应该解析日期值并手动创建Date对象。

self.CustomOrderDate = ko.observable(new Date(+data.CustomerOrderDate.replace(/\/Date\((\d+)\)\//, '$1'))); 
+0

这是POST,当序列化回我的MVC对象不工作。从MVC模型 - > KO工作得很好。 – ekenman 2013-02-28 08:05:02

0

谢谢保罗指点我在正确的方向。

我现在用牛顿JSON序列化到KO视图模型是这样的:

var viewModel = ko.mapping.fromJS(@(Html.Raw(JsonConvert.SerializeObject(Model, new IsoDateTimeConverter()))));  

然后回传给服务器的日期是ISO和“微软日期”。看起来KO处理这两种格式,并且只是传回它所得到的。

这篇文章也给一些更多的信息:Handling dates with Asp.Net MVC and KnockoutJS