我在ASP.Net MVC5应用程序中使用Kendo UI网格,并设置了一个列,这样当您对其进行过滤时,它将查询数据库以获取唯一结果。我定义这样的列:
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值,该请求的值将与应用于主网格的过滤器一起填充。过滤器的结果始终为空。这是我的控制器方法的样子:
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:和
如果有人能告诉我如何在控制器上安装过滤器,将不胜感激。
谢谢。
答案 0 :(得分:1)
如果这对任何集成kendo jQuery UI + .net core 2.0+的用户都有用,则可以通过在我的应用程序中包含kendo.aspnetmvc js文件并设置DataSource.type =“ webapi”来解决此问题。
对于我的项目的背景: 服务器:.NET Core 2.2 客户:aurelia SPA(js),打字稿
答案 1 :(得分: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;