淘汰视图模型日期 - > MVC 4视图模型未在帖子上转换

时间:2013-02-27 16:45:36

标签: javascript asp.net-mvc-4 knockout.js

我有一个带日期的淘汰视图模型。 Viewmodel包含一个包含多个BookingRows(orderRows)的CustomerOrder。这些视图模型中的每一个都有日期。为了便于阅读,我删除了大量数据:

 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如何做到这一点表示赞赏。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

感谢Paul指出我正确的方向。

我现在使用Newton JSON序列化到KO视图模型,如下所示:

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

然后传回服务器的日期是ISO和“Microsoft日期”。似乎KO处理这两种格式并且只是传回它所获得的内容。

这篇文章还提供了更多信息:Handling dates with Asp.Net MVC and KnockoutJS