1

我有一个带有日期的淘汰视图模型。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 Dates 的形式发送,如下所示:

CustomerOrderDate":"/日期(1361981980121)/

它不会被解析为我的视图模型的日期,它是 DateTime。

任何如何做到这一点的建议表示赞赏。

4

2 回答 2

0

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

self.CustomOrderDate = ko.observable(new Date(+data.CustomerOrderDate.replace(/\/Date\((\d+)\)\//, '$1')));
于 2013-02-27T18:21:52.073 回答
0

感谢保罗为我指明了正确的方向。

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

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

然后传回服务器的日期是 ISO 和“Microsoft 日期”。似乎 KO 处理了这两种格式,只是把它得到的东西传回去。

这篇文章还提供了更多信息:使用 Asp.Net MVC 和 KnockoutJS 处理日期

于 2013-02-28T09:10:53.743 回答