【问题标题】:Knockout viewmodel date -> MVC 4 View Model not converted on post淘汰视图模型日期-> MVC 4视图模型未在发布时转换
【发布时间】:2013-02-13 14:00:05
【问题描述】:

我有一个带有日期的淘汰视图模型。 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":"/Date(1361981980121)/

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

感谢任何建议如何做到这一点。

【问题讨论】:

  • JSON 不做日期。可能最容易将它们作为字符串传回并使用客户端javascript解析它们。 (hanselman.com/blog/…)

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


【解决方案1】:

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

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

【讨论】:

  • 这是 POST,当序列化回我的 MVC 对象时不起作用。从 MVC 模型 -> KO 工作得很好。
【解决方案2】:

感谢 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2013-01-15
    • 2013-07-08
    • 2012-11-09
    • 2012-11-29
    相关资源
    最近更新 更多