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

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

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

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

网格数据源:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
public HttpResponseMessage KendoGridMyTeam(GridInputModel inputModel)
{
     ... 
}

GridInputModel.cs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
    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
运行
AI代码解释
复制
[DataSourceRequest] DataSourceRequest request

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

EN

回答 3

Stack Overflow用户

发布于 2016-11-15 23:38:48

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

票数 1
EN

Stack Overflow用户

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

在你的javascript中,试试这个:

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

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

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

Stack Overflow用户

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

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

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

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

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

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

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

复制
相关文章
真正彻底卸载ie8的某些加载项
但是,有的加载项“删除”不可选的,这时如果是你不想要的或流氓加载项咋办?如果你不只是禁用掉它,还需要永久删除掉它,怎么办?
williamwong
2018/07/24
8320
真正彻底卸载ie8的某些加载项
分离链接的散列散列代码实现
散列 散列为一种用于以常数平均时间执行插入,删除和查找的技术。一般的实现方法是使通过数据的关键字可以计算出该数据所在散列中的位置,类似于Python中的字典。关于散列需要解决以下问题: 散列的关键字如何映射为一个数(索引)——散列函数 当两个关键字的散列函数结果相同时,如何解决——冲突 散列函数 散列函数为关键字->索引的函数,常用的关键字为字符串,则需要一个字符串->整数的映射关系,常见的三种散列函数为: ASCII码累加(简单) 计算前三个字符的加权和$\sum key[i] * 27^{i}$ (不太
月见樽
2018/04/27
1.5K0
散列/散列函数「建议收藏」
每个关键字被映射到从0-TableSize-1这个范围中的某个数,并且被放到适当的单元中。这种映射就叫做散列函数
全栈程序员站长
2022/08/28
8930
散列/散列函数「建议收藏」
散列算法与散列码
一、引入 1 /** 2 * Description:新建一个类作为map的key 3 */ 4 public class Groundhog 5 { 6 protected int number; 7 8 public Groundhog(){ 9 } 10 public Groundhog(int number) 11 { 12 this.number = number; 13 } 14 15 @Overr
JMCui
2018/03/15
1.5K0
散列算法与散列码
散列
将一个元素的关键码和存储位置之间建立对应的函数关系 Hash( ), 使得每个关键码与结构中的唯一的存储位置相对应:
Rikka
2022/02/07
1.8K0
散列
选择键值,冲突的时候采取不同的策略 散列函数: 简单的散列函数: 1 int hash(const string & key,int tableSize) 2 { 3 int hashVal = 0; 4 for(int i = 0; i < key.length();++i) 5 { 6 hashVal + = key[i]; 7 } 8 return hashVal % tableSize; 9 } 比较好的散列函数: 1 int hash( c
用户1154259
2018/01/17
8140
散列查找和哈希查找_散列检索
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。建立了关键字与存储位置的映射关系,公式如下:
全栈程序员站长
2022/11/15
8990
使用VBA遍历数据验证列表中的每一项
想要遍历数据验证列表中的每一项,如何编写VBA代码呢?如果数据验证列表中的项值来源于单元格区域或者命名区域,则很简单,遍历该区域即可。然而,有些数据验证列表是直接使用逗号分隔的项添加的,这就需要使用不同的方法。
fanjy
2023/08/29
4900
使用VBA遍历数据验证列表中的每一项
散列冲突
概念:如果当一个元素被插入时与一个已经插入的元素散列到相同的值, 那么就会产生冲突, 这个冲突需要消除。解决这种冲突的方法有几种:本章介绍两种方法:分离链接法和开放定址法
全栈程序员站长
2022/08/27
5960
Hash散列[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146553.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/27
6720
遍历ArrayList,并删除某些元素的方法实现「建议收藏」
本文是根据 https://blog.csdn.net/qq_32575047/article/details/78902254 的帖子进行整理的,在此感谢一下。
全栈程序员站长
2022/11/14
4380
散列函数
散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,查找的期望时间为O(1)。
233333
2019/09/24
9200
散列查找
散列同顺序、链接和索引一样,是又一种数据存储方法。散列存储的方法是:以数据集合中的每个元素的关键字k为自变量,通过一种函数h(k)计算出函数值,把这个值用做一块连续存储空间(即数组或文件空间)中的元素存储位置(即下标),将该元素存储到这个下标位置上。散列存储中使用的函数h(k)被称为散列函数或哈希函数,它实现关键字到存储位置(地址)的映射(或称转换),h(k)被称为散列地址或哈希地址;使用的数组或文件空间是对数据集合进行散列存储的地址空间,所以被称为散列表或哈希表。在散列表上进行查找时,首先根据给定的关键字k,用与散列存储时使用的同一散列函数h(k)计算出散列地址,然后按此地址从散列表中取出对应的元素。
全栈程序员站长
2022/08/27
1.2K0
散列查找
详解Echarts中的配置项
我把Echarts中常用的标题、图例、提示框、工具栏等配置项归类到Echarts 图表的基本配置项。各个配置项主要的配置参数如下:
九仞山
2023/10/14
8260
PHP:返回指定页码数集合项的新集合
PHP内置了 array_slice(array,start,length,preserve) 方法就可以实现这个了,然后还可以简单封装一下
Alone88
2019/10/21
7140
java检验数组重复_java – 如何遍历数组并检查重复项?「建议收藏」
您可以使用嵌套循环遍历数组以查看新输入是否存在.在函数中执行此操作会更好.此外,在执行此操作时,您需要确保您不在第一个元素,否则您将获得空指针异常.
全栈程序员站长
2022/09/29
1.4K0
MySql缓存中的关键项
MySql的设计中大量使用了缓存,下面这些缓存配置项是应该熟知的 key_buffer_size key_buffer_size是设置MyISAM表索引的缓冲区大小,此参数对MyISAM表性能影响最大 对于内存在4GB左右的服务器来说,该参数可设置为256MB或384MB table_cache table_cache是指表高速缓存的大小。当MySQL访问一个表时,如果在MySQL表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区,这样做的好处是可以更快速地访问表中的内容 一般通过查看 Open_tabl
dys
2018/04/02
1.3K0
iView使用中的注意项
官网 https://www.iviewui.com/components/table Table <template> <div> <Table border :columns="table_header" :data="table_data"> <template slot-scope="{ row }" slot="name"> <strong>{{ row.name }}</strong> </template> <template s
码客说
2021/11/12
1.1K0
浅谈散列运算
“指纹”一词形象地描述了散列运算的结果。在现实生活中,两个人可能长得很像,但是他们的指纹不同,根据指纹就能对这两个人进行区分。
小蜜蜂
2019/07/24
1.1K0
浅谈散列运算
搜索引擎中的URL散列
散列(hash)也就是哈希,是信息存储和查询所用的一项基本技术。在搜索引擎中网络爬虫在抓取网页时为了对网页进行有效地排重必须对URL进行散列,这样才能快速地排除已经抓取过的网页。最理想的状态是对联网上所有的网页都分配一个哈希地址,可想而知这是一个相当宠大的数字,但实际上往往是无法做到这一点。虽然google、百度都是采用分布式的机群进行哈希排重,但实际上也是做不到所有的网页都分配一个唯一散列地址。但是可以通过多级哈希来尽可能地解决,但却要会出时间代价在解决哈希冲突问题。所以这是一个空间和时间相互制约的问题,我们知道哈希地址空间如果足够大可以大大减少冲突次数,所以可以通过多台机器将哈希表根据一定的特征局部化,分散开来,每一台机器都是管理一个局部的散列地址。
Java架构师必看
2021/03/22
1.7K0

相似问题

在nodejs和镜像上使用HTML5

12

NodeJS + Websockets + HTML5视频标签和‘流媒体’

11

通过nodejs服务html5

10

NodeJS + HTML5 + Telnet =可能吗?

10

NodeJS和HTML5 Websockets不能一起工作

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文