Kendo UI jQuery Grid Server端过滤

问题描述 投票:2回答:1

我正在使用Kendo UI for jQuery Grid显示一些数据。到目前为止,我正在使用客户端过滤和分页,其中所有数据记录都是在对服务器的初始调用中返回的(在服务器端使用了Web API和Dapper)。但是,随着数据源的增长,从服务器一次调用中获取所有数据的想法不再可行。

我已使用以下选项启用了服务器端分页和过滤的选项:

serverPaging: true,
serverSorting: true,
serverAggregates: true,
serverFiltering: true,

过滤器和页面调度信息作为查询参数传递,例如:

take: 20
skip: 0
page: 1
pageSize: 20
filter[logic]: and
filter[filters][0][logic]: or
filter[filters][0][filters][0][value]: High
filter[filters][0][filters][0][operator]: eq
filter[filters][0][filters][0][field]: status
filter[filters][0][filters][1][value]: Medium
filter[filters][0][filters][1][operator]: eq
filter[filters][0][filters][1][field]: status
filter[filters][1][logic]: and
filter[filters][1][filters][0][field]: Name
filter[filters][1][filters][0][operator]: startswith
filter[filters][1][filters][0][value]: a
filter[filters][1][filters][1][field]: Name
filter[filters][1][filters][1][operator]: contains
filter[filters][1][filters][1][value]: a

所以我们面临的第一个问题是尝试将这些过滤器和其他参数映射到某些Kendo提供的DTO(我们已经使用Kendo MVC控件DataSourceRequest类),但是这些过滤器从未正确地映射到该过滤器。我也知道[FromUri][FromBody]选项的使用,因此无需提及任何此类解决方案:)

[我接下来要担心的是,即使以某种方式(现在假设),我也能够正确地将过滤器和其他参数映射到某些DTO,我们如何才能在数据源上实际使用这些过滤器,这实际上是由Dapper SQL查询。

此外,我也要避免手动过滤器解析和生成动态where子句。

就Kendo文档而言,尽管有这样一种可行的演示,但服务器功能不存在或可用的功能对我们没有太大用,如下所示:

    public ActionResult Remote_Binding_Orders_Read([DataSourceRequest]DataSourceRequest request)
    {
        return Json(GetOrders().ToDataSourceResult(request));
    }

正如已经在Kendo jQuery Grid中尝试过的那样,过滤器永远不会映射到DataSourceRequest

再说一次,下面的代码在我们使用Dapper时也没有太大帮助:

public static IQueryable<OrderViewModel> ApplyOrdersFiltering(this IQueryable<OrderViewModel> data, IList<IFilterDescriptor> filterDescriptors)
{
    if (filterDescriptors != null && filterDescriptors.Any())
    {
        data = data.Where(ExpressionBuilder.Expression<OrderViewModel>(filterDescriptors, false));
    }
    return data;
}

orders = orders.ApplyOrdersFiltering(request.Filters);

如果有人遇到相同的问题并找到了解决方法,那么将非常感谢您的帮助。

注意:从Dapper更改为Entity Framework是不可行的,这同样适用于Kendo jQuery Grid。

jquery asp.net-web-api kendo-ui kendo-grid dapper
1个回答
0
投票

毕竟找不到任何解决方法(即使是telerik支持也无法解决,也无法提出任何解决方法。]

因此决定进行自定义实现(也为可能遇到相同情况的所有开发人员创建了一个甜蜜的小工具)。

因此必须手动生成可用于创建动态WHERE,ORDER BY,GROUP BY和SELECT(用于聚合)子句的表达式。

有关更多详细信息,请参阅以下存储库:KendoGridFASMS

还有nuget包:Nuget Package

还向所有人开放该存储库以供进一步定制:)

© www.soinside.com 2019 - 2024. All rights reserved.