我有一个带有Web Api服务器端排序的网格,它可以工作。我有一个添加过滤的要求。当网格的数据源将过滤参数发送到Web Api控制器时,Filter对象始终为“空”,而不是null。这是我的设置
网格数据源:
var myTeamGridDataSource = new kendo.data.DataSource({
serverPaging: true,
serverSorting: true,
serverFiltering: true,
schema: {
data: "data",
total: "count"
},
pageSize: 10,
transport: {
read: {
url: baseMyTeamUrl, // web api
dataType: "json",
type: "POST",
}
},
sort: {
field: "Name",
dir: "asc"
}
});
操作:
public HttpResponseMessage KendoGridMyTeam(GridInputModel inputModel)
{
...
}
GridInputModel.cs
public class GridInputModel
{
public int Page { get; set; }
public int PageSize { get; set; }
public int Skip { get; set; }
public int Take { get; set; }
public List<GridInputSortModel> Sort { get; set; }
public List<GridInputFilterModel> Filter { get; set; }
}
GridInputFilterModel.cs
public class GridInputFilterModel
{
public GridInputFilterModel()
{
filters = new List<GridInputFilterModel>();
}
public string field { get; set; }
public string Operator { get; set; }
public object value { get; set; }
public string logic { get; set; }
public List<GridInputFilterModel> filters { get; set; }
}
请求正文
take=10&skip=0&page=1&pageSize=10&sort[0][field]=Name&sort[0][dir]=asc
&filter[filters][0][field]=Name
&filter[filters][0][operator]=eq
&filter[filters][0][value]=cling
&filter[logic]=and
实例化了GridInputModel "GridInputModel inputModel“,预设了sort对象,该功能工作得很好。但是过滤器在客户端设置并发送到服务器时是空的。经过多次搜索,我找不到服务器端网格过滤的现代示例。您可以建议我将Kendo.Mvc库与以下内容一起使用:
[DataSourceRequest] DataSourceRequest request
这也会在请求中创建一个过滤器对象,但过滤器也是空的。有什么建议吗?我不太愿意使用的一种选择是使用parameterMap并在查询字符串上发送过滤器。如果有必要,没问题,但总得有人把它修好。
发布于 2016-11-15 23:38:48
发生的情况是您的应用程序服务器端没有正确地反序列化filter对象。如果将参数设置为对象并查看实际发送的JSON,就可以看到这一点。您的筛选器将出现在字符串中。在发送之前使用参数映射并格式化过滤器数组,您可能会重载kendo使用的DataSourceClass。我也有同样的问题,我必须创建我自己的类,并在发送之前格式化过滤器。弄乱过滤器的问题是过滤器数组中的运算符属性。
发布于 2016-11-18 04:30:17
在你的javascript中,试试这个:
var grid = $("#YourGridId").data("kendoGrid");
var $filter = new Array();
$filter.push({ field: "Name", operator: "eq", value: "cling" });
grid.dataSource.filter($filter);
在你的控制器方法中,你需要这个签名:
public ActionResult ReadData([DataSourceRequest]DataSourceRequest request){
...
}
发布于 2017-12-14 15:57:51
我正在使用MVC而不是WebApi,但是我得到了传递到我的控制器方法的空过滤器的相同症状。我也创建了自己的模型来处理发送给我的控制器方法的请求参数,尝试解析Kendo的过滤器结构,等等。我最终通过关注法拉菲尔博客上的this example让它工作了。具体地说,您需要对代码进行下面列出的更改。
最后,下面所示的技术使得为Kendo的DataSource实现服务器处理变得非常容易(一旦您知道了使其工作所需的所有组件)。
Grid DataSource:您必须匹配从服务器返回的所有(区分大小写的)字段。我忽略了错误,它停止了工作。您可能需要更改类型才能使其与WebApi一起工作。
type: "aspnetmvc-ajax",
schema: {
data: "Data",
total: "Total",
errors: "Errors",
model: {
id: "YourKeyFieldName"
}
},
操作:是的,您需要使用Kendo的DataSourceRequest对象及其属性。
using Kendo.MVC.UI;
using Kendo.MVC.Extensions;
[HttpPost]
public ActionResult KendoGridMyTeam([DataSourceRequest] DataSourceRequest request)
{
...
return Json(yourDataVariable.ToDataSource(request));
}
https://stackoverflow.com/questions/40596407
复制相似问题