DataSourceRequest - 为Kendo UI Grid过滤null

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

我在ASP.Net MVC5应用程序中使用了一个Kendo UI Grid,并设置了一个列,以便在您对其进行过滤时,它会向数据库查询唯一结果。我像这样定义列:

col.Filterable(x => x.Multi(true).Search(true).DataSource(ds => ds.Read(r => r.Action("UniqueColumn", "Workbook").Data("filterUniquenessColumn()").Type(HttpVerbs.Post)).ServerFiltering(true)));

这只是第一次进入控制器时调用控制器,因为它是缓存的。为了解决这个问题,我订阅了ColumnMenuInit事件并添加了以下代码:

var menu = e.container.find(".k-menu").data("kendoMenu");
menu.bind('open', function (ex) {
    if ($(ex.item).find('span.k-i-filter').length > 0) {
        var filterMultiCheck = e.container.find(".k-filterable").data("kendoFilterMultiCheck");
        if (filterMultiCheck) {

            if ($('#grid').data('kendoGrid').dataSource.filter() !== undefined) {
                var grid = $('#grid').data('kendoGrid');
                filterMultiCheck.checkSource.transport.options.read.data.filter = grid.dataSource.filter();                    
                filterMultiCheck.checkSource.options.type = 'aspnetmvc-ajax';
            }
            filterMultiCheck.checkSource.read();
        }
    }
});

这会在每次进行过滤时调用控制器(这就是我想要的)。我遇到的问题是,在控制器端,我无法使用应用于主网格的过滤器填充[DataSourceRequest] DataSourceRequest请求的Filters值。 Filters的结果始终为null。这是我的控制器方法的样子:

        public ActionResult UniqueColumn([DataSourceRequest] DataSourceRequest request)

有谁知道如何获取要填充的请求的过滤器属性?我在网络上设置了跟踪,以下内容通过url传递:

filter%5Bfilters%5D%5B0%5D%5Bfield%5D:PCode filter%5Bfilters%5D%5B0%5D%5Boperator%5D:eq filter%5Bfilters%5D%5B0%5D%5Bvalue%5D:00090h4210 filter%5Blogic%5D :和

如果有人能告诉我如何在控制器上获得过滤器,将不胜感激。

提前致谢。

jquery asp.net-mvc kendo-grid kendo-asp.net-mvc
2个回答
1
投票

如果这有助于任何人集成kendo jQuery UI + .net core 2.0+,能够通过在我的应用程序中包含kendo.aspnetmvc js文件并设置DataSource.type =“webapi”来解决这个问题。

链接:https://docs.telerik.com/kendo-ui/controls/data-management/grid/how-to/binding/web-api-server-operations

有关我项目的背景信息:服务器:.NET Core 2.2客户端:aurelia SPA(js),typescript


0
投票

如果其他人有这个问题,我可以通过执行以下操作来解决它:

        if ($('#grid').data('kendoGrid').dataSource.filter() !== undefined) {
                    var grid = $('#grid').data('kendoGrid');
                    var parameterMap = grid.dataSource.transport.parameterMap;
                    var dataRequest = parameterMap({
                        sort: grid.dataSource.sort(),
                        filter: grid.dataSource.filter(),
                        group: grid.dataSource.group(),
        } 

var request = decodeURIComponent($.param(dataRequest));                        
filterMultiCheck.checkSource.transport.options.read.url = "/Workbook/UniqueColumn" + "?" + request;
© www.soinside.com 2019 - 2024. All rights reserved.