【问题标题】:KendoUI grid server filtering not getting data to controllerKendoUI 网格服务器过滤未将数据发送到控制器
【发布时间】:2017-12-21 14:50:50
【问题描述】:

我已经在我的 MVC 项目中使用 jquery 实现了 kendo UI Grid。我想执行服务器过滤,但我没有将过滤器对象放入我的控制器。我试过下面的代码。

JS代码:

$("#AccountLedgerReport").kendoGrid({
        toolbar: ["excel", "pdf"],
        excel: {
            allPages: true,
            filterable: true
        },
        pdf: {
            filterable: true
        },
        dataSource: {
            type: "aspnetmvc-ajax",
            serverSorting: true,
            serverPaging: true,
            serverFiltering: true,
            transport: {
                read: getActionURL() + "url?site....,
                type: "POST",
                dataType: "json"
            },
            pageSize: 50,
            schema: {                    
                    return data;
                },
                data: 'data',
                total: 'total',
                model: {
                    fields: {                        
                        PnrNumber: { type: "string" }
                        , TransactionId: { type: "number" }
                        , CreatedByName: { type: "string" }
                        ...
                    }
                },
            },
            aggregate: [
                { field: "xxx", aggregate: "max" }                    
            ]
        },
        dataBound: onDataBound, 
        sortable: true,
        filterable: true,
        columnMenu: true,
        filterable: {
            mode: "row"
        },    
        pageable: {
            refresh: true,
            pageSizes: true,
            buttonCount: 5,
            serverFiltering: true,
            pageSizes: 50
        }, 
        columns: [
        {
            field: "x",
            title: "x",
            format: x,
            width: 145,
            footerTemplate: 'Total :',
            filterable: {
                cell: {
                    showOperators: true
                }
            },

        },...
        ]
    });

然后我想要获取数据的控制器端是:

public JsonResult actionname(int site..., IDictionary<string, string>[] sort, .., IDictionary<string, Tuple<string, string, string>[]> filter)

我面临的挑战是过滤器参数。排序的数据在需要的时候来了,但过滤器的数据没有来。

请求的 URL 如下:

https://localhost/...?site..&sort[0][field]=xx&sort[0][dir]=asc

这是排序完成的时候。

https://localhost/..?site...&filter[logic]=and&filter[filters][0][operator]=eq&filter[filters][0][value]=held&filter[filters][0][field]=xxx

这是过滤器正在进行的时候。

我没有找到我做错的地方。

【问题讨论】:

  • 如果将控制器签名更改为 ([DataSourceRequest]DataSourceRequest request) 会发生什么情况。用于排序、分页、分组等的参数应该在request 字段中找到。我还对所有 kendo 数据源请求使用 POST,但您似乎在 URL 上显示参数,这将是获取参数——这可能是问题的一部分。
  • 实际上,我认为我必须添加 kendo 的 dll 和其他东西......我想避免......我可以不用 dll 而不是请告诉我
  • @Rush.2707 您是否尝试在我的回答中应用该方法?

标签: javascript jquery asp.net-mvc kendo-grid


【解决方案1】:

根据官方文档详细信息,Action 方法中剩余的参数很少,因此请使用以下内容更新您的控制器操作。不幸的是,我之前遇到过这个问题并最终解决了。通过这种方式,排序和过滤将完美地工作。请尝试这种方法。

JS 代码

$("#AccountLedgerReport").kendoGrid({
        toolbar: ["excel", "pdf"],
        excel: {
            allPages: true,
            filterable: true
        },
        pdf: {
            filterable: true
        },
        dataSource: {
            type: "aspnetmvc-ajax",
            serverSorting: true,
            serverPaging: true,
            serverFiltering: true,
            transport: {
                read: getActionURL() + "url?site....,
                type: "POST",
                dataType: "json"
            },
            pageSize: 50,
            schema: {                    
                    return data;
                },
                data: 'data',
                total: 'total',
                model: {
                    fields: {                        
                        PnrNumber: { type: "string" }
                        , TransactionId: { type: "number" }
                        , CreatedByName: { type: "string" }
                        ...
                    }
                },
            },
            aggregate: [
                { field: "xxx", aggregate: "max" }                    
            ]
        },
        dataBound: onDataBound, 
        sortable: true,
        filterable: true,
        columnMenu: true,
        filterable: {
            mode: "row"
        },    
        pageable: {
            refresh: true,
            pageSizes: true,
            buttonCount: 5,
            serverFiltering: true,
            pageSizes: 50
        }, 
        columns: [
        {
            field: "x",
            title: "x",
            format: x,
            width: 145,
            footerTemplate: 'Total :',
            filterable: {
                cell: {
                    showOperators: true
                }
            },

        },...
        ]
    });

动作控制器

public JsonResult YourActionName(int id, DateTime startDate, DateTime endDate, int take, int skip, int page, IDictionary<string, string>[] sort, int dateFilterOn, string number)

【讨论】:

  • 哇...!!你是怎样找到它的?这是有效的。非常感谢 Ankit,你节省了我所有的时间。现在,这完全符合预期。你是救世主。
猜你喜欢
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 2015-04-02
  • 2019-01-20
  • 1970-01-01
相关资源
最近更新 更多