Angular 2 Kendo 网格不支持 odata v4

Posted

技术标签:

【中文标题】Angular 2 Kendo 网格不支持 odata v4【英文标题】:Angular 2 Kendo grid not supporting odata v4 【发布时间】:2017-12-29 20:01:19 【问题描述】:

我确实尝试使用带有 odata v4 的 angular 2 kendo 网格进行服务器端过滤,但它显示不支持“包含”关键字。新版本使用 'substringof' 而不是 'contains' 我该如何解决这个问题

【问题讨论】:

您找到解决方案了吗?我也面临同样的问题... 是的,实际上我使用了错误的版本而不是 V4 并且还检查了 Web ApiConfig 【参考方案1】:

安装Odata V4并配置WebApiConfig.cs

 ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
                var customer = builder.EntitySet<CustomerModel>("CustomerSearch");

                config.Routes.MapODataServiceRoute(
                  routeName: "odata",
                  routePrefix: "odata",
                  model: builder.GetEdmModel());

'CustomerModel' 是我要返回的模型 “CustomerSearch”控制器名称

Odata 控制器

 [EnableQuery]
    public class CustomerSearchController : ODataController
    

        [EnableQuery]
        public IQueryable<CustomerModel> Get()
        
            CustomerModelResponse list = new CustomerModelResponse();
            try
            
                list = CustomerBL.GetCustomer(0);
            
            catch (Exception)
            

                throw;
            
            return list.CustomerList.AsQueryable();
        

    

【讨论】:

【参考方案2】:

我们使用 OData v3。

我所做的是我正则表达式 queryString 如果它有一个 contains() 然后用 substringof() 替换它

这是一个例子:

  let queryString = toODataString(state);
  const regex = /(contains(([^)]+)\)))/;
  queryString = _.replace(queryString, regex, `substringof('$filter.value', $filter.field)`);

我在这里使用 lodash,但我也应该使用 string.replace 函数

【讨论】:

以上是关于Angular 2 Kendo 网格不支持 odata v4的主要内容,如果未能解决你的问题,请参考以下文章

在 Kendo UI Chart Angular 2 中隐藏网格线

带有复选框列的 Kendo Angular 2 网格

如何根据 Kendo-Angular2-grid 中的数据自动调整网格列的大小?

Angular 的 Kendo 中未刷新网格数据

Kendo for Angular2:如何用 kendo glyphicon 替换网格排序图标

Angular 的 Kendo UI:如何在网格中定义最小宽度