首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于MVC的Kendo Grid服务器端过滤

基于MVC的Kendo Grid服务器端过滤
EN

Stack Overflow用户
提问于 2016-11-15 03:30:56
回答 3查看 2.9K关注 0票数 0

我有一个带有Web Api服务器端排序的网格,它可以工作。我有一个添加过滤的要求。当网格的数据源将过滤参数发送到Web Api控制器时,Filter对象始终为“空”,而不是null。这是我的设置

网格数据源:

代码语言:javascript
代码运行次数:0
运行
复制
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"
    }
});

操作:

代码语言:javascript
代码运行次数:0
运行
复制
public HttpResponseMessage KendoGridMyTeam(GridInputModel inputModel)
{
     ... 
}

GridInputModel.cs

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
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; }

}

请求正文

代码语言:javascript
代码运行次数:0
运行
复制
    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库与以下内容一起使用:

代码语言:javascript
代码运行次数:0
运行
复制
[DataSourceRequest] DataSourceRequest request

这也会在请求中创建一个过滤器对象,但过滤器也是空的。有什么建议吗?我不太愿意使用的一种选择是使用parameterMap并在查询字符串上发送过滤器。如果有必要,没问题,但总得有人把它修好。

EN

回答 3

Stack Overflow用户

发布于 2016-11-16 07:38:48

发生的情况是您的应用程序服务器端没有正确地反序列化filter对象。如果将参数设置为对象并查看实际发送的JSON,就可以看到这一点。您的筛选器将出现在字符串中。在发送之前使用参数映射并格式化过滤器数组,您可能会重载kendo使用的DataSourceClass。我也有同样的问题,我必须创建我自己的类,并在发送之前格式化过滤器。弄乱过滤器的问题是过滤器数组中的运算符属性。

票数 1
EN

Stack Overflow用户

发布于 2016-11-18 12:30:17

在你的javascript中,试试这个:

代码语言:javascript
代码运行次数:0
运行
复制
var grid = $("#YourGridId").data("kendoGrid");
var $filter = new Array();
$filter.push({ field: "Name", operator: "eq", value: "cling" });
grid.dataSource.filter($filter);

在你的控制器方法中,你需要这个签名:

代码语言:javascript
代码运行次数:0
运行
复制
public ActionResult ReadData([DataSourceRequest]DataSourceRequest request){
   ...
}
票数 1
EN

Stack Overflow用户

发布于 2017-12-14 23:57:51

我正在使用MVC而不是WebApi,但是我得到了传递到我的控制器方法的空过滤器的相同症状。我也创建了自己的模型来处理发送给我的控制器方法的请求参数,尝试解析Kendo的过滤器结构,等等。我最终通过关注法拉菲尔博客上的this example让它工作了。具体地说,您需要对代码进行下面列出的更改。

最后,下面所示的技术使得为Kendo的DataSource实现服务器处理变得非常容易(一旦您知道了使其工作所需的所有组件)。

Grid DataSource:您必须匹配从服务器返回的所有(区分大小写的)字段。我忽略了错误,它停止了工作。您可能需要更改类型才能使其与WebApi一起工作。

代码语言:javascript
代码运行次数:0
运行
复制
type: "aspnetmvc-ajax",
schema: {
    data: "Data",
    total: "Total",
    errors: "Errors",
    model: {
        id: "YourKeyFieldName"
    }
},

操作:是的,您需要使用Kendo的DataSourceRequest对象及其属性。

代码语言:javascript
代码运行次数:0
运行
复制
using Kendo.MVC.UI;
using Kendo.MVC.Extensions;
[HttpPost]
public ActionResult KendoGridMyTeam([DataSourceRequest] DataSourceRequest request)
{
     ... 
    return Json(yourDataVariable.ToDataSource(request));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40596407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档