1

我有一个奇怪的问题,我们网格的编辑模板在编辑日期时会导致问题。

日期以 UTC 时区存储在服务器上。我使用以下模式来设置时区:-

private DateTime _minDate;
public DateTime MinDate
{
    get { return _minDate; }
    set { _minDate = DateTime.SpecifyKind(value, DateTimeKind.Utc); }
}

使用 WebApi OData 服务将日期加载到网格中。

{
    "Id":50088,
    "ProductId":101437,
    "Valor":"12224000",
    "ISIN":"CH0122240002",
    "Description":"Outperformance Bonus Certificate, Multi Shares",
    "Provider":"CSIB",
    "AlertedTicker":"KO UN",
    "ProtectionPercentage":1.0,
    "ProtectionType":"Protection Lost",
    "UnderlyingCurrency":"USD",
    "BarrierLevel":190.0,
    "BarrierPercentage":70.0,
    "BarrierType":"Low",
    "BarrierId":0,
    "EventStructureId":170378,
    "Date":"2013-11-20T00:00:00Z",
    "Comment":null,
    "Confirm":false,
    "Reject":false
}

OData 服务正确序列化了 UTC 日期,并且日期完好无损地到达 UI。

在使用日期选择器控件编辑日期但仅使用键盘键入后,数据会以错误的格式发送回服务器。

{
    "odata.metadata":"http://local.host:51850/web/odata/$metadata#PendingBarrierAlerts/@Element",
    "Id":50088,
    "ProductId":101437,
    "Valor":"12224000",
    "ISIN":"CH0122240002",
    "Description":"Outperformance Bonus Certificate, Multi Shares",
    "Provider":"CSIB",
    "AlertedTicker":"KO UN",
    "ProtectionPercentage":1.0,
    "ProtectionType":"Protection Lost",
    "UnderlyingCurrency":"USD",
    "BarrierLevel":190.0,
    "BarrierPercentage":70.0,
    "BarrierType":"Low",
    "BarrierId":0,
    "EventStructureId":170378,
    "Date":"2013-11-20T23:00:00Z",
    "Comment":null,
    "Confirm":false,
    "Reject":false
}

请注意日期已更改时间!

如何在网格中编辑 UTC 日期并使用 OData 作为传输和远程数据源将它们正确返回到服务器?

4

2 回答 2

1

我用来避免@PeturSubev所说的是parse在我的身上实现一个DataSource.model正确初始化日期的函数。

dataSource:{
    ...
    schema:{
        parse:function (response) {
            $.each(response, function (idx, elem) {
                if (elem.Date && typeof elem.Date === "string") {
                    elem.Date = kendo.parseDate(elem.Date, "yyyy-MM-ddTHH:mm:ss.fffZ");
                }
            });
            return response;
        }
    }

}

所以我让 KendoUI 处理他们想要的任何日期。

于 2013-11-11T16:15:27.150 回答
1

日期始终在客户端创建为本地日期(而不是 UTC 日期)。要拦截并避免结果中发生的事情,您需要在 Grid/DataSource 开始使用它们之前使用 requestEnd 事件来转换这些日期。

您可以在此处看到类似的方法。

于 2013-11-11T15:46:10.980 回答