Kendo UI 日期时间
Kendo UI DateTime
我第一次使用Kendo UI,有点小问题。当我用 DateTime 属性 制作一个 class 并在 Kendo Grid 中实现它时,DateTime 的字段总是显示这个 "The field DateOfLastCheck must be a date."。我尝试了所有,更改顺序,放置一个属性, 但总是一样的。这是我的 Kendo 代码:
@(Html.Kendo().Grid<Models.OvergasClient>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(c => c.Name).Width(200);
columns.Bound(c => c.Address).Width(200);
columns.Bound(c => c.AddressNumber).Width(200);
columns.Bound(c => c.Floor).Width(200);
columns.Bound(c => c.Appartment).Width(200);
columns.Bound(c => c.RegNumber).Width(200);
columns.Bound(c => c.Telephone).Width(200);
columns.Bound(c => c.isChecked).Width(200);
columns.Bound(c => c.DateOfLastCheck).Format("{0:yyyy/mm/dd}").Width(200);
columns.Bound(c => c.EquipmentNumber).Width(200);
columns.Bound(c => c.Type).Width(200);
columns.Bound(c => c.Note).Width(200);
columns.Bound(c => c.Status).Width(200);
columns.Bound(c => c.Inspector).Width(200);
columns.Bound(c => c.Editor).Width(200);
columns.Command(command => { command.Edit().UpdateText("Запази").CancelText("Откажи").Text("Редактирай"); command.Destroy().Text("Изтрий"); }).Width(180);
})
.ToolBar(toolbar => {
toolbar.Create().Text("Създай");
})
.ColumnMenu()
.HtmlAttributes(new { style = "height:450px;" })
.Editable(editable => editable.Mode(GridEditMode.PopUp))
.Pageable(p => p.Refresh(true).PageSizes(true).ButtonCount(5))
.Selectable(selectable =>
{
selectable.Mode(GridSelectionMode.Single);
selectable.Type(GridSelectionType.Row);
})
.Sortable(sortable =>
{
sortable.SortMode(GridSortMode.SingleColumn);
})
.Filterable()
.Scrollable()
.Groupable(m=>m.Messages(c=>c.Empty("Постави името на колоната тук, за да сортираш по тази колона")))
.Events(events => {
events.Cancel("onCancel");
events.Change("onChange");
events.ColumnHide("onColumnHide");
events.Edit("onEdit");
events.SaveChanges("onSaveChanges");
events.Save("onSave");
events.Remove("onRemove");
events.DetailExpand("onDetailExpand");
events.DataBinding("onDataBinding");
events.DataBound("onDataBound");
events.ColumnShow("onColumnShow");
})
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(m => m.Id);
model.Field(m => m.DateOfLastCheck).Editable(true);
})
.Read(read => read.Action("OvergasClients_Read", "OGTechnika"))
.Create(create => create.Action("OvergasClients_Create", "OGTechnika"))
.Update(update => update.Action("OvergasClients_Update", "OGTechnika"))
.Destroy(destroy => destroy.Action("OvergasClients_Destroy", "OGTechnika"))
)
)
为此,您需要设置一个 ViewModel,并将所有日期字段设置为 System.DateTime。然后绑定网格的字段以使用该 ViewModel。我为此挣扎了大约一个小时。格式不正确,但这不会阻止数据显示。我刚刚在我的一个旧网格项目中测试过它。
您的代码:
columns.Bound(c => c.DateOfLastCheck).Format("{0:yyyy/mm/dd}").Width(200);
请注意 mm
是 分钟 。您可能需要 MM
几个月。
我猜你有类似 2016/59/29
的日期,因此显然不是有效日期。
此处基于文档 http://docs.telerik.com/kendo-ui/framework/globalization/dateformatting mm
表示分钟而不是月份。您的 DateOfLastCheck
属性也可以为空吗?您可能也想检查一下。
我第一次使用Kendo UI,有点小问题。当我用 DateTime 属性 制作一个 class 并在 Kendo Grid 中实现它时,DateTime 的字段总是显示这个 "The field DateOfLastCheck must be a date."。我尝试了所有,更改顺序,放置一个属性, 但总是一样的。这是我的 Kendo 代码:
@(Html.Kendo().Grid<Models.OvergasClient>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(c => c.Name).Width(200);
columns.Bound(c => c.Address).Width(200);
columns.Bound(c => c.AddressNumber).Width(200);
columns.Bound(c => c.Floor).Width(200);
columns.Bound(c => c.Appartment).Width(200);
columns.Bound(c => c.RegNumber).Width(200);
columns.Bound(c => c.Telephone).Width(200);
columns.Bound(c => c.isChecked).Width(200);
columns.Bound(c => c.DateOfLastCheck).Format("{0:yyyy/mm/dd}").Width(200);
columns.Bound(c => c.EquipmentNumber).Width(200);
columns.Bound(c => c.Type).Width(200);
columns.Bound(c => c.Note).Width(200);
columns.Bound(c => c.Status).Width(200);
columns.Bound(c => c.Inspector).Width(200);
columns.Bound(c => c.Editor).Width(200);
columns.Command(command => { command.Edit().UpdateText("Запази").CancelText("Откажи").Text("Редактирай"); command.Destroy().Text("Изтрий"); }).Width(180);
})
.ToolBar(toolbar => {
toolbar.Create().Text("Създай");
})
.ColumnMenu()
.HtmlAttributes(new { style = "height:450px;" })
.Editable(editable => editable.Mode(GridEditMode.PopUp))
.Pageable(p => p.Refresh(true).PageSizes(true).ButtonCount(5))
.Selectable(selectable =>
{
selectable.Mode(GridSelectionMode.Single);
selectable.Type(GridSelectionType.Row);
})
.Sortable(sortable =>
{
sortable.SortMode(GridSortMode.SingleColumn);
})
.Filterable()
.Scrollable()
.Groupable(m=>m.Messages(c=>c.Empty("Постави името на колоната тук, за да сортираш по тази колона")))
.Events(events => {
events.Cancel("onCancel");
events.Change("onChange");
events.ColumnHide("onColumnHide");
events.Edit("onEdit");
events.SaveChanges("onSaveChanges");
events.Save("onSave");
events.Remove("onRemove");
events.DetailExpand("onDetailExpand");
events.DataBinding("onDataBinding");
events.DataBound("onDataBound");
events.ColumnShow("onColumnShow");
})
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(m => m.Id);
model.Field(m => m.DateOfLastCheck).Editable(true);
})
.Read(read => read.Action("OvergasClients_Read", "OGTechnika"))
.Create(create => create.Action("OvergasClients_Create", "OGTechnika"))
.Update(update => update.Action("OvergasClients_Update", "OGTechnika"))
.Destroy(destroy => destroy.Action("OvergasClients_Destroy", "OGTechnika"))
)
)
为此,您需要设置一个 ViewModel,并将所有日期字段设置为 System.DateTime。然后绑定网格的字段以使用该 ViewModel。我为此挣扎了大约一个小时。格式不正确,但这不会阻止数据显示。我刚刚在我的一个旧网格项目中测试过它。
您的代码:
columns.Bound(c => c.DateOfLastCheck).Format("{0:yyyy/mm/dd}").Width(200);
请注意 mm
是 分钟 。您可能需要 MM
几个月。
我猜你有类似 2016/59/29
的日期,因此显然不是有效日期。
此处基于文档 http://docs.telerik.com/kendo-ui/framework/globalization/dateformatting mm
表示分钟而不是月份。您的 DateOfLastCheck
属性也可以为空吗?您可能也想检查一下。