【问题标题】:Format DateTime in Kendo UI Grid using asp.net MVC Wrapper使用 asp.net MVC Wrapper 在 Kendo UI Grid 中格式化 DateTime
【发布时间】:2013-09-14 04:01:27
【问题描述】:

我想构建一个日期为 dd//MM/yyyy 格式的 Kendo UI Grid。但是,我发现的所有问题都通过代码 Format("{0:d}"); 解决。所以,我尝试了下面的代码:

GridBoundColumnBuilder<TModel> builder = par.Bound(field.Name);

        switch (field.Type.Type)
        {
            case CType.Boolean:
                builder = builder.ClientTemplate(string.Format("<input type='checkbox' #= {0} ? checked='checked' : '' # disabled='disabled' ></input>", field.Name));
                break;
            case CType.Datetime:
                builder = builder.Format("{0:d}");
                break;
            case CType.Decimal:
            case CType.Double:
                builder = builder.Format("{0:0.00}");
                break;
        }

另一种格式可以正常工作,只是 DateTime 不工作。

我得到了 Datetime = /Date(1377020142000)/的这个结果/

【问题讨论】:

  • 你是怎么解决这个问题的?
  • 你能在哪里解决这个问题?使用 .Format("{0:dd.MM.yyyy}") 我让它正确显示,但编辑不起作用。有什么想法吗?

标签: c# asp.net-mvc-4 datetime kendo-grid kendo-asp.net-mvc


【解决方案1】:

如果您想在剑道网格中显示日期时间格式,请执行此操作,

.Format("{0:dd/MM/yyyy}") 

或者

builder.ToString("dd/MM/yyyy");

【讨论】:

  • 或类似 .Format("{0:G}")
【解决方案2】:

其他解决方案很接近,但没有雪茄……这对我有用:

columns.Bound(c => c.CreatedDate).ClientTemplate("#= kendo.toString(kendo.parseDate(CreatedDate), 'dd/MM/yyyy') #");

【讨论】:

  • 这样可以让网格过滤正常工作吗?
  • 您的过滤应该在服务器端完成,而不是在客户端。您可能想尝试使用 .NET MVC 等效于此处使用的“ItemTemplate”docs.telerik.com/kendo-ui/api/javascript/ui/grid/configuration/…(我无法轻松找到 .NET MVC 参考)。
  • 感谢您的回复。我会看看这个:)
【解决方案3】:
.Format("{0:" + System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern + "}");

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat 中可能还有一些其他选项可能对您有用,如果这不是您想要的。

【讨论】:

  • 这是我一直在寻找的答案。对我来说更有意义,因为为什么要强制某人使用本地化日期格式,除非您确定他们的实际位置。
  • 我正在尝试您指定的相同方式,但它不起作用。我不想指定日期格式。它应该来自文化。
【解决方案4】:

也可以使用:

columns.Bound(c => c.DateCreate).Format("{0:G}")

http://docs.telerik.com/kendo-ui/framework/globalization/dateformatting

【讨论】:

  • 显示效果很好,但编辑器无法获取格式,因此显示有关无效日期的错误消息。有什么想法吗?
  • 在您的 ViewModel 中使用适当的格式是否可行?
【解决方案5】:

试试这个,这会奏效。

.ClientTemplate("#= kendo.toString(kendo.parseDate(Date,'dd/MM/yyyy'), '" +  CurrentDateFormat + "') #");

【讨论】:

  • 它是一种自定义模板,它将按照您在 kendo.parseDate() 中提供的模式格式化您的 DateTime。
【解决方案6】:

我不了解 Kendo UI,但在我看来,您希望传递字符串格式的日期而不是 DateTime 对象。

/Date(...)/ 输出看起来像来自 .Net 的 JSON 格式的日期。

在将日期传递给控件之前,我会使用 myDateTime.ToString("dd/MM/yyyy"); 之类的东西将日期转换为字符串。

【讨论】:

  • 我发现类似于 ClientTemplate("#=kendo.toString(MyPropertyDateTime,\"dd/MM/yyyy\") #");但也不要工作。我无法更改我的属性类型,因为我有很多数据而且很辛苦。
  • 我认为问题出在控件的 javascript 端。 MS 将日期时间格式化为字符串“/Date(...)/”。修复它的两种方法 1/。在传递给控件之前更改传递给字符串的值。 2/。修改 js 以应对正在传递的日期。
【解决方案7】:

核心问题记录得非常好here。将那里的答案与我发现的其他东西结合起来,这就是我必须做的才能让它在我的项目中工作。

在 C# 代码中:

.Template("#= kendo.toString(parseDate(" + field.Name + "), 'dd/MM/yyyy') #");

然后,创建一个javascript函数:

function parseDate(d) {
  d = new Date(parseInt(d.replace(/\/Date\((-?\d+)\)\//gi, "$1"), 10));
  return d;
}

这有点麻烦,但很有效。

【讨论】:

    【解决方案8】:

    感谢您的回答:

    我使用 ClientTemplate 并调用 javascript 函数在 Kendo 网格列中的 HH:MM:SS 中以秒为单位格式化持续时间:

                    .ClientTemplate("#= secToHHMMSS(DurationInSeconds) # ")
                        .Title("Duration")
                        .Width(150);

    function secToHHMMSS(s) {
        f = Math.floor;
        g = (n) => ('00' + n).slice(-2);
        return f(s / 3600) + ':' + g(f(s / 60) % 60) + ':' + g(s % 60)
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多