同一 Telerik Kendo UI 网格中的日期格式不同
Date formatting differently in the same Telerik Kendo UI Grid
我一直在我的 MVC3 项目中使用 Kendo 网格,没有任何问题。但是最近我添加了一些 Ajax 仅包含 3 个日期列的 MVC razor 网格。虽然日期的格式完全相同,但其中一列只是拒绝被识别为日期并且没有格式化。
我尝试使用 Microsoft json 日期格式,然后编写了我自己的 JsonNetResult class 以将日期格式化为 ISO 8601 格式,最后我修改了它以生成如下所示的日期格式低于 'yyy-MM-dd HH:mm:ss'。 None 这些格式允许我重新格式化 'Uploaded Date' 列的日期!!其他两列被识别为日期和相应的格式。
C# 模型(为简洁起见删除了其他道具)如下所示:
public class EmailAuditListModel
{
public DateTime Date { get; set; }
[DisplayName("Investor's alert sent")]
public DateTime? InvestorSent { get; set; }
[DisplayName("Adviser's alert sent")]
public DateTime? AdviserSent { get; set; }
public virtual DocumentListModel Document { get; set; }
}
public class DocumentListModel
{
[DisplayName("DocId")]
public int DocId { get; set; }
[DisplayName("Uploaded Date")]
public DateTime UploadDate { get; set; }
}
JSON 是以下格式的集合(删除了额外的字段)。可以看到日期都是一致的。
{
"Date": "2015-03-27 17:56:37",
"InvestorSent": "2015-03-27 17:56:39",
"AdviserSent": "2015-03-27 17:56:36",
"Document": {
"UploadDate": "2015-03-27 17:42:49"
}
}
Razor 视图代码(删除了额外的字段)是:
@(Html.Kendo().Grid<EmailAuditListModel>()
.Name("EmailAuditGrid")
.Columns(columns =>
{
columns.Bound(e => e.InvestorSent).Format("{0:dd/MM/yyyy HH:mm}").Hidden(true);
columns.Bound(e => e.AdviserSent).Format("{0:dd/MM/yyyy HH:mm}").Hidden(true);
columns.Bound(e => e.Document.UploadDate).Format("{0:dd/MM/yyyy HH:mm}");
})
.Groupable()
.Sortable()
.Filterable()
.Resizable(resize => resize.Columns(true))
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5))
.DataSource(datasource => datasource
.Ajax()
.Read(read => read.Action("EmailAudits_Read","Document"))
.Sort(sort => sort.Add(e => e.Document.UploadDate).Descending()))
.ColumnMenu()
)
...网格看起来像
有什么想法吗??
我解决这个问题的第一个方法是在将模型传递给 Kendo 网格配置之前展平模型。
public class EmailAuditListModelFlat
{
public DateTime Date { get; set; }
public DateTime? InvestorSent { get; set; }
public DateTime? AdviserSent { get; set; }
public DateTime DocumentUploadDate { get; set; }
}
PS。应该是评论吧,我现在还写不出来
上传日期不同的原因是被识别为字符串类型而不是日期类型。不幸的是,这是绑定到网格的 DataSource 对象的限制。为了正确获取日期格式,您可以尝试以下操作之一:
1) 将日期放在模型对象的根级别(根据@suvroc 的)post 这很好,但这意味着您必须更改模型才能与前端一起使用。
2) 在您的子模型中提供日期的字符串格式版本,如下所示:
public class DocumentListModel
{
[DisplayName("DocId")]
public int DocId { get; set; }
[DisplayName("Uploaded Date")]
public DateTime UploadDate { get; set; }
[DisplayName("Uploaded Date")]
public string UploadDateToString
{
get
{
return UploadDate.toString("dd/MM/yyyy HH:mm");
}
}
}
然后从当前上传的 属性 更改您的网格绑定。
3) 使用内置客户端模板重新格式化列,如下所示:
columns.Bound(e => e.Document.UploadDate)
.ClientTemplate("#=reformatDateTime(data.Document.UploadDate,'dd/MM/yyyy HH:mm')#");
然后使用这样的 javascript 函数:
function reformatDateTime(dateValue, dateFormat){
return kendo.toString(kendo.parseDate(dateValue), dateFormat);
}
这样做的目的是将日期值转换为有效的日期对象,然后根据您传入的日期格式对其进行格式化。
我个人更喜欢选项 3,因为它更简单、更易于维护,而且一旦编写好,就可以在任何地方重复使用。
好吧,我希望这对您有所帮助,如果您需要更多信息,请告诉我。
我一直在我的 MVC3 项目中使用 Kendo 网格,没有任何问题。但是最近我添加了一些 Ajax 仅包含 3 个日期列的 MVC razor 网格。虽然日期的格式完全相同,但其中一列只是拒绝被识别为日期并且没有格式化。
我尝试使用 Microsoft json 日期格式,然后编写了我自己的 JsonNetResult class 以将日期格式化为 ISO 8601 格式,最后我修改了它以生成如下所示的日期格式低于 'yyy-MM-dd HH:mm:ss'。 None 这些格式允许我重新格式化 'Uploaded Date' 列的日期!!其他两列被识别为日期和相应的格式。
C# 模型(为简洁起见删除了其他道具)如下所示:
public class EmailAuditListModel
{
public DateTime Date { get; set; }
[DisplayName("Investor's alert sent")]
public DateTime? InvestorSent { get; set; }
[DisplayName("Adviser's alert sent")]
public DateTime? AdviserSent { get; set; }
public virtual DocumentListModel Document { get; set; }
}
public class DocumentListModel
{
[DisplayName("DocId")]
public int DocId { get; set; }
[DisplayName("Uploaded Date")]
public DateTime UploadDate { get; set; }
}
JSON 是以下格式的集合(删除了额外的字段)。可以看到日期都是一致的。
{
"Date": "2015-03-27 17:56:37",
"InvestorSent": "2015-03-27 17:56:39",
"AdviserSent": "2015-03-27 17:56:36",
"Document": {
"UploadDate": "2015-03-27 17:42:49"
}
}
Razor 视图代码(删除了额外的字段)是:
@(Html.Kendo().Grid<EmailAuditListModel>()
.Name("EmailAuditGrid")
.Columns(columns =>
{
columns.Bound(e => e.InvestorSent).Format("{0:dd/MM/yyyy HH:mm}").Hidden(true);
columns.Bound(e => e.AdviserSent).Format("{0:dd/MM/yyyy HH:mm}").Hidden(true);
columns.Bound(e => e.Document.UploadDate).Format("{0:dd/MM/yyyy HH:mm}");
})
.Groupable()
.Sortable()
.Filterable()
.Resizable(resize => resize.Columns(true))
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5))
.DataSource(datasource => datasource
.Ajax()
.Read(read => read.Action("EmailAudits_Read","Document"))
.Sort(sort => sort.Add(e => e.Document.UploadDate).Descending()))
.ColumnMenu()
)
...网格看起来像
有什么想法吗??
我解决这个问题的第一个方法是在将模型传递给 Kendo 网格配置之前展平模型。
public class EmailAuditListModelFlat
{
public DateTime Date { get; set; }
public DateTime? InvestorSent { get; set; }
public DateTime? AdviserSent { get; set; }
public DateTime DocumentUploadDate { get; set; }
}
PS。应该是评论吧,我现在还写不出来
上传日期不同的原因是被识别为字符串类型而不是日期类型。不幸的是,这是绑定到网格的 DataSource 对象的限制。为了正确获取日期格式,您可以尝试以下操作之一:
1) 将日期放在模型对象的根级别(根据@suvroc 的)post 这很好,但这意味着您必须更改模型才能与前端一起使用。
2) 在您的子模型中提供日期的字符串格式版本,如下所示:
public class DocumentListModel
{
[DisplayName("DocId")]
public int DocId { get; set; }
[DisplayName("Uploaded Date")]
public DateTime UploadDate { get; set; }
[DisplayName("Uploaded Date")]
public string UploadDateToString
{
get
{
return UploadDate.toString("dd/MM/yyyy HH:mm");
}
}
}
然后从当前上传的 属性 更改您的网格绑定。
3) 使用内置客户端模板重新格式化列,如下所示:
columns.Bound(e => e.Document.UploadDate)
.ClientTemplate("#=reformatDateTime(data.Document.UploadDate,'dd/MM/yyyy HH:mm')#");
然后使用这样的 javascript 函数:
function reformatDateTime(dateValue, dateFormat){
return kendo.toString(kendo.parseDate(dateValue), dateFormat);
}
这样做的目的是将日期值转换为有效的日期对象,然后根据您传入的日期格式对其进行格式化。
我个人更喜欢选项 3,因为它更简单、更易于维护,而且一旦编写好,就可以在任何地方重复使用。
好吧,我希望这对您有所帮助,如果您需要更多信息,请告诉我。