自定义Kendo DataSource的OData URL?

时间:2015-01-22 15:46:01

标签: asp.net asp.net-web-api kendo-ui odata kendo-datasource

我正在使用指向ASP.NET Web API OData控制器的Kendo Grid。我想知道是否可以自定义/覆盖Kendo的DataSource生成的生成的OData URL?我的问题是我的日期字段是DateTimeOffset,我正在尝试按这些字段排序,但是Kendo的模型字段仅支持字符串/ bool /数字/日期,DateTimeOffset没有。它为日期字段生成的URL是:

http://localhost/api/odata/customers?%24inlinecount=allpages&%24top=10&%24filter=(CreatedDate+ge+datetime%272015-01-01T00%3A00%3A00%27)失败了。

应该是:

http://localhost:900/api/odata/customers?%24inlinecount=allpages&%24top=10&%24filter=(CreatedDate+ge+ DATETIMEOFFSET %272015-01-01T00%3A00 3A00%%27)

是否可以强制使用datetimeoffset?

2 个答案:

答案 0 :(得分:0)

您可能没有使用正确的“odata”运输。试试“odata-v4”。有关详细信息here

答案 1 :(得分:0)

对于我的ASP.NET Web API 2的OData V4控制器,我实际上需要这种URL格式:

http://localhost:XX/odata/Things?$filter=DteTmOfsField eq 2012-12-03T07:16:23Z

这个javascript对我来说非常好用:

 $(document).ready(function () {
        $("#grid").kendoGrid({
            dataSource: {
                type: "odata-v4",
                transport: {
                    read: {
                        url: "/odata/Things/",
                        dataType: "json"
                    },
                    parameterMap: function (options,type) {
                        var paramMap = kendo.data.transports.odata.parameterMap(options, type);

                        if (paramMap.$filter) {

                            paramMap.$filter = paramMap.$filter.replace(/datetime'([-0-9T:]{19})'/gi, "$1Z");

                        }
                        paramMap.$count = true;
                        delete paramMap.$inlinecount; // <-- remove inlinecount parameter
                        delete paramMap.$format; // <-- remove format parameter

                        return paramMap;
                    }
                },