I have setup a grid to display a complex object like so:
public class A
{
public DateTime Created { get; set; }
}
public class B
{
public A Subobject { get; set; }
public DateTime Created { get; set; }
}
When I pass a list of B objects, the Created fields for both A and B are set properly. However, while the Kendo grid appears to handle B's Created property as a Date/Time, A's Created property appears to get converted to a string as it appears in the format "/Date(#############)/" when displayed in the grid.
This appears to cause A's Created field to be posted back as a Date/Time.Min value (01/01/0001) when the record is Updated, instead of the "real" value when it was received from the server during the Read operation. This causes ModelState.IsValid to be false.
Is there any way to fix this? I found a post related to this at http://www.kendoui.com/forums/ui/grid/date-column-type-doesn-t-work-when-data-source-is-a-datatable.aspx, but can't seem to find where to set a ModelFieldDescriptor in MVC.
EDIT:
Some additional information. This only happens when the Delete AJAX method is called. When the Edit AJAX method is called, the Subobject property of object B is null and ModelState.IsValid is true.
public class A
{
public DateTime Created { get; set; }
}
public class B
{
public A Subobject { get; set; }
public DateTime Created { get; set; }
}
When I pass a list of B objects, the Created fields for both A and B are set properly. However, while the Kendo grid appears to handle B's Created property as a Date/Time, A's Created property appears to get converted to a string as it appears in the format "/Date(#############)/" when displayed in the grid.
This appears to cause A's Created field to be posted back as a Date/Time.Min value (01/01/0001) when the record is Updated, instead of the "real" value when it was received from the server during the Read operation. This causes ModelState.IsValid to be false.
Is there any way to fix this? I found a post related to this at http://www.kendoui.com/forums/ui/grid/date-column-type-doesn-t-work-when-data-source-is-a-datatable.aspx, but can't seem to find where to set a ModelFieldDescriptor in MVC.
EDIT:
Some additional information. This only happens when the Delete AJAX method is called. When the Edit AJAX method is called, the Subobject property of object B is null and ModelState.IsValid is true.
5 Answers, 1 is accepted
0
Hi Steven,
You can access the value of the Date field with B.Subobject in your template, however using complex models currently is not supported out-of-the-box and the B.Subobject will return string like "/Date(1344200400000)/".
You should flatten your model or implement workaround like:
Kind Regards,
Vladimir Iliev
the Telerik team
You can access the value of the Date field with B.Subobject in your template, however using complex models currently is not supported out-of-the-box and the B.Subobject will return string like "/Date(1344200400000)/".
You should flatten your model or implement workaround like:
- Creating client template where the value of B.Subobject is parsed by javascript Date function:
#= kendo.toString(new Date(parseInt(B.Subobject.replace(/[A-Za-z$--/]/g, ""))),"dd MMMM yyyy") #
- If you are using KendoUI Web Grid, you can parse the data received from the server, before the Grid loads it using the shema.parse method.
script type=
"text/javascript"
>
$(document).ready(
function
() {
var
dataSource =
new
kendo.data.DataSource({
transport: {
read: {
url:
"home/indexjson"
,
dataType:
"json"
}
},
// determines if changes will be send to the server individually or as batch
batch:
true
,
schema: {
parse:
function
(response) {
for
(
var
currentObject
in
response) {
//Parsing the data before its used
response[currentObject].Subobject = response[currentObject].Subobject.Date;
};
return
response;
},
model: {
id:
"OrderID"
,
fields: {
OrderID: { validation: { required:
true
} },
Subobject: { type:
"date"
},
OrderDescription: { validation: { required:
true
} }
}
}
}
//...
});
$(
"#grid"
).kendoGrid({
dataSource: dataSource,
groupable:
true
,
scrollable:
true
,
sortable:
true
,
pageable:
true
,
filterable:
true
,
editable:
true
,
columns: [
{
field:
"OrderID"
,
title:
"Order ID"
},
{
field:
"Subobject"
,
title:
"Date"
,
format:
"{0:dd MM yyyy}"
},
{
field:
"OrderDescription"
,
title:
"Order Description"
}]
});
});
</script>
Vladimir Iliev
the Telerik team
Join us on our journey to create the world's most complete HTML 5 UI Framework - download Kendo UI now!
0
John
Top achievements
Rank 2
answered on 04 Nov 2014, 11:37 PM
Will a fix for this eventually make it into Kendo UI MVC?
0
Hi John,
Please note that the described behavior is not an issue - the DataSource "schema" doesn't support parsing nested fields which is the reason why the dates are not parsed. As I mention possible solution is to either flatter your model using ViewModel or manually parse the nested fields on the client side. The latest can be achieved using the "Custom" DataSource builder which allows the developer to specify "schema.parse" function:
Regards,
Vladimir Iliev
Telerik
Please note that the described behavior is not an issue - the DataSource "schema" doesn't support parsing nested fields which is the reason why the dates are not parsed. As I mention possible solution is to either flatter your model using ViewModel or manually parse the nested fields on the client side. The latest can be achieved using the "Custom" DataSource builder which allows the developer to specify "schema.parse" function:
.DataSource(d => d
.Custom()
.Schema(schema => {
schema.Parse(@<text>
function(data) {
//parse the nested fields here
return
data;
}
</text>);
Regards,
Vladimir Iliev
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
0
Saad
Top achievements
Rank 1
answered on 18 Oct 2017, 09:35 AM
I have the same issue, please fix it
0
Hello, Saad,
The discussed behavior is expected based on the supported functionalities of the dataSource.
If the desired result is to use a schema with complex objects, please make a feature request in our feedback portal and based on its popularity we may implement it in a future release:
http://kendoui-feedback.telerik.com/forums/127393-kendo-ui-feedback/category/63716-data-source
Regards,
Stefan
Progress Telerik
The discussed behavior is expected based on the supported functionalities of the dataSource.
If the desired result is to use a schema with complex objects, please make a feature request in our feedback portal and based on its popularity we may implement it in a future release:
http://kendoui-feedback.telerik.com/forums/127393-kendo-ui-feedback/category/63716-data-source
Regards,
Stefan
Progress Telerik
Try our brand new, jQuery-free Angular components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.