Hello to everyone, I'm getting trouble with odata and datasource. I've an entity wich has a lot of date time fields wich are exposed by a grid. When I try to make an update i got this error:
The field xxxx cannot be converted to DateTime etc etc...... string is not a valid date time value.
Looking to POST request I've seen that the key /value pairs have this format:
"Expiry_Date":"/Date(-6847804800000)/"
I got this exception:
"type": "System.FormatException", "stacktrace": " in System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)\r\n in System.Convert.ToDateTime(String value, IFormatProvider provider)\r\n in System.String.System.IConvertible.ToDateTime(IFormatProvider provider)\r\n in System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)\r\n in System.Data.Services.Serializers.JsonDeserializer.ConvertValues(Object value, String propertyName, Type typeToBeConverted, DataServiceProviderWrapper provider)"
Below there is the datasource and grid definitions:
Here the service:
400 Bad Request
The field xxxx cannot be converted to DateTime etc etc...... string is not a valid date time value.
Looking to POST request I've seen that the key /value pairs have this format:
"Expiry_Date":"/Date(-6847804800000)/"
I got this exception:
"type": "System.FormatException", "stacktrace": " in System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)\r\n in System.Convert.ToDateTime(String value, IFormatProvider provider)\r\n in System.String.System.IConvertible.ToDateTime(IFormatProvider provider)\r\n in System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)\r\n in System.Data.Services.Serializers.JsonDeserializer.ConvertValues(Object value, String propertyName, Type typeToBeConverted, DataServiceProviderWrapper provider)"
Below there is the datasource and grid definitions:
var
dataSource =
new
kendo.data.DataSource({
type:
"odata"
,
serverPaging:
true
,
serverSorting:
true
,
serverFiltering:
true
,
pageSize: 20,
batch:
false
,
schema: {
model: {
id:
"No_"
,
fields: {
No_: { type:
"string"
},
Customer_WR_Code: { type:
"string"
},
Description: { type:
"string"
},
State: { type:
"string"
},
Creation_Date: { type:
"date"
},
Creation_Time: { type:
"date"
},
Closing_Date: { type:
"date"
},
Closing_Time: { type:
"date"
},
Cancelling_Date: { type:
"date"
},
Cancelling_Time: { type:
"date"
},
Expiry_Date: { type:
"date"
},
Appointment_Begin_Date: { type:
"date"
},
Appointment_Begin_Time: { type:
"date"
},
Appointment_End_Time: { type:
"date"
},
Appointment_End_Date: { type:
"date"
},
DateTime_Field_1: { type:
"date"
},
DateTime_Field_2: { type:
"date"
},
Date_Field_1: {type:
"date"
},
Date_Field_2: {type:
"date"
}
}
}
},
transport: {
read:
"WCFDB.svc/View_Work_Request"
,
update: {
url:
"WCFDB.svc/View_Work_Request"
,
type:
"POST"
,
dataType:
"json"
}
}
});
$(
"#grid"
).kendoGrid({
dataSource: dataSource,
height: 550,
pageable: {
refresh:
true
,
pageSizes:
true
},
reorderable:
true
,
editable:
"inline"
,
sortable:
true
,
filterable:
true
,
columnMenu:
true
,
navigatable:
false
,
resizable:
true
,
toolbar: kendo.template($(
"#tmplToolBar"
).html()),
change:
function
(e) {
var
grid = $(
"#grid"
).data(
"kendoGrid"
);
var
model = grid.dataItem(grid.select());
refreshTab(model);
},
dataBound:
function
(e) {
var
item = e.sender.dataSource.at(0); refreshTab(item); },
selectable:
"row"
,
columns: kendoGridColumns
});
Here the service:
[JSONPSupportBehavior]
public class WCFDB : DataService<WOMContainer>
{
// Questo metodo viene chiamato solo una volta per inizializzare i criteri a livello di servizio.
public static void InitializeService(DataServiceConfiguration config)
{
// TODO: impostare regole per indicare i set di entità e le operazioni del servizio visibili, aggiornabili e così via.
// Esempi:
config.SetEntitySetPageSize(
"*"
, 20);
config.SetEntitySetAccessRule(
"*"
, EntitySetRights.All);
config.SetServiceOperationAccessRule(
"*"
, ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
config.UseVerboseErrors =
true
;
}
................................
................................
................................
................................