为什么KendoGrid中配置的parameterMap方法未被触发?
问题原因
你遇到的parameterMap不生效的核心原因是aspnetmvc-ajax是Kendo UI预定义的专用数据源类型,该类型自带了内置的parameterMap实现用于适配ASP.NET MVC后端的参数绑定规则,你直接定义在transport下的自定义parameterMap会被内置的默认配置覆盖,因此不会被调用。
解决方案
有两种常用的修复方式:
方案1:直接复用内置parameterMap逻辑,追加自定义处理
不需要修改数据源类型,直接调整你的parameterMap代码,先调用内置的参数处理逻辑,再追加日期转换逻辑即可:
parameterMap: function (data, type) { // 先调用aspnetmvc-ajax内置的参数转换逻辑,保证原有参数适配逻辑正常 const processedParams = kendo.data.transports['aspnetmvc-ajax'].prototype.options.parameterMap(data, type); // 处理StartDate过滤条件的时区转换 if (data.filter && data.filter.filters) { data.filter.filters.forEach(filter => { // 匹配StartDate字段的过滤条件 if (filter.field === 'StartDate' && filter.value instanceof Date) { // 本地时间转换为UTC时间 filter.value = new Date(Date.UTC( filter.value.getFullYear(), filter.value.getMonth(), filter.value.getDate(), filter.value.getHours(), filter.value.getMinutes(), filter.value.getSeconds() )); } }); } return processedParams; }
方案2:扩展自定义数据源类型
如果有多处同类需求,可以直接扩展aspnetmvc-ajax类型,封装通用的时区转换逻辑:
// 扩展自定义aspnetmvc-ajax数据源类型 kendo.data.sources['aspnetmvc-ajax-utc'] = kendo.data.DataSource.extend({ init: function(options) { options = options || {}; const baseTransport = kendo.data.sources['aspnetmvc-ajax'].prototype.options.transport; // 合并内置配置和自定义配置 options.transport = kendo.deepExtend({}, baseTransport, options.transport, { parameterMap: function(data, type) { const processed = baseTransport.parameterMap.call(this, data, type); // 通用的日期字段UTC转换逻辑 if (data.filter?.filters) { data.filter.filters.forEach(filter => { if (filter.value instanceof Date) { filter.value = new Date(Date.UTC( filter.value.getFullYear(), filter.value.getMonth(), filter.value.getDate(), filter.value.getHours(), filter.value.getMinutes(), filter.value.getSeconds() )); } }); } return processed; } }); kendo.data.DataSource.fn.init.call(this, options); } });
使用时将数据源的type修改为aspnetmvc-ajax-utc即可。
注意事项
- 两种方案都保留了
aspnetmvc-ajax原有的参数序列化逻辑,不会影响后端原有ASP.NET MVC的参数绑定能力 - 如果你的过滤规则包含多级嵌套过滤(带and/or逻辑组合),需要递归遍历
filters数组处理所有层级的过滤条件
内容的提问来源于stack exchange,提问作者Denis Kaminsky
相关产品推荐
相关产品推荐

