【问题标题】:Telerik Kendo Grid DateTime column is always nullTelerik Kendo Grid DateTime 列始终为空
【发布时间】:2015-06-04 22:12:32
【问题描述】:

我有一个带有多个绑定列的 Telerik Kendo Grid。除此 DateTime 列 tsCreated 外,所有列都按预期工作,它始终为空。

模型:

    [DataType(DataType.Date)]
    public DateTime tsCreated { get; set; }

网格:

@(Html.Kendo().Grid<NNC.ViewModels.OrderViewModel>()
        .Name("grid")
        .Columns(columns =>
        {
            columns.Bound(c => c.tsCreated);
            columns.Bound(c => c.orderNr);
            columns.Bound(c => c.customerName);
            columns.Bound(c => c.description);                
        })
        .Groupable()
        .Filterable()
        .Sortable()
        .Pageable()
        .DataSource(dataSource => dataSource
            .Ajax()
            .Events(events => events.Error("kendoGrid_ErrorHandler"))
            .Model(model => model.Id("orderNr"))
            .Read(read => read.Action("EditingInline_Read", "Orders"))                
        )
)

JSON 数据确实在 tsCreated 中显示日期:

{
 "Data":[{"orderNr":"13011155","tsCreated":"\/Date(1423579599377)\/",
 "description":"xxxx","customerName":"xxxxx"}],"Total":1,
 "AggregateResults":null,"Errors":null
 }

我还创建了一个 ClientTemplate 来显示值,如下所示:

columns.Bound(c => c.tsCreated).ClientTemplate(
                "W= #= tsCreated #"
            );

但它显示:

W= null

感谢任何帮助!

【问题讨论】:

  • 你在使用 Globalize.js 吗?因为 Kendo UI 与 Globalize.js 冲突。要解决这个问题,只需在 Globalize 之前加载 Kendo。
  • 谢谢@NicolásCarlo,我添加了这个作为答案。如果您想自己做,请接受,我会接受这个答案。非常感谢,我花了很多时间,但这就是你学习的方式;-)
  • 将其添加为答案。我很高兴它有帮助。 :)

标签: c# kendo-ui telerik kendo-grid kendo-asp.net-mvc


【解决方案1】:

如果您使用Globalize.js,就会出现问题。 Kendo UI 与 Globalize 的日期函数冲突,因此目前的解决方法是在 Kendo UI 相关脚本之后加载Globalize.js。

这是 Telerik 论坛上的相关讨论(位于:http://www.telerik.com/forums/registering-globalize-js-before-kendo-culture-js-causes-datetime-columns-in-grids-to-fail-formatting):

基本上,当您加载 globalize 库时,kendo.parseDate 会启动 使用 Globalize.parseDate 方法而不是我们自己的实现 kendo.parseNumber。而且由于 globalize 解析器无法解析 MVC 成功返回日期的格式。

例如

Globalize.parseDate("/Date(-47876400000)/")

在 Kendo 脚本不会覆盖之后加载 globalize 库 我们的实现和网格将成功解析它。

恐怕没有其他解决方法。

【讨论】:

    【解决方案2】:

    也许从 UNIX 纪元的日期转换失败?可以尝试使用剑道UI日期转换。

    @(Html.Kendo().Grid<NNC.ViewModels.OrderViewModel>()
        .Name("grid")
        .Columns(columns =>
        {
            columns.Bound(c => c.tsCreated).ClientTemplate("W= #= kendo.toString(tsCreated , "m") #");
            columns.Bound(c => c.orderNr);
            columns.Bound(c => c.customerName);
            columns.Bound(c => c.description);                
        })
        .Groupable()
        .Filterable()
        .Sortable()
        .Pageable()
        .DataSource(dataSource => dataSource
            .Ajax()
            .Events(events => events.Error("kendoGrid_ErrorHandler"))
            .Model(model => model.Id("orderNr"))
            .Read(read => read.Action("EditingInline_Read", "Orders"))                
            )
    )
    

    【讨论】:

    • 谢谢@Vash。好吧,我确实在 ClientTemplate 中输出了 tsCreated 的值(请参阅问题),它清楚地表明它为空。但是,尼古拉斯·卡罗已经给出了解决方案。
    • 是的,在发布我的帖子后才注意到您的回答。在您的问题中,您没有kendo.ToString()。无论如何,您的问题有所不同,也许它可以帮助遇到类似问题的其他人。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2019-07-11
    • 1970-01-01
    相关资源
    最近更新 更多