You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kendo Grid服务端模式分组后搜索int类型Id报错

Kendo Grid分组后搜索int类型Id字段报错解决方法

服务端模式的Kendo Grid完成分组操作后,搜索int类型的Id字段时触发报错,报错出现在控制器返回数据列表的环节。

控制器代码:

return isGrouping ? Json(lstofToolAction.ToDataSourceResult(request), JsonRequestBehavior.AllowGet) : Json(new { Data = lstofToolAction, Total = total }, JsonRequestBehavior.AllowGet);

报错信息(已翻译):

提供的表达式应为字符串类型
参数名称: stringExpression filter

问题原因

当Grid处于分组状态时,会调用ToDataSourceResult方法处理请求,该方法默认将Id字段的搜索条件按字符串类型表达式解析,但Id是int类型,类型不匹配导致抛出参数错误。

解决方法

方法一:前端指定字段过滤类型

在Grid的列配置中,为Id字段明确设置过滤的数据类型为number,让前端发送符合类型要求的过滤请求,避免后端解析出错:

$("#grid").kendoGrid({
    columns: [
        { 
            field: "Id", 
            title: "ID",
            filterable: {
                dataType: "number"
            }
        },
        // 其他列配置
    ],
    // 分页、分组等其他配置
});

方法二:后端修正过滤条件类型

在控制器中接收DataSourceRequest后,手动遍历过滤条件,将针对Id字段的字符串类型过滤转换为数值类型处理:

var request = new DataSourceRequest();
TryUpdateModel(request);

if (request.Filters != null)
{
    foreach (var filter in request.Filters.OfType<FilterDescriptor>())
    {
        if (filter.Member.Equals("Id", StringComparison.OrdinalIgnoreCase))
        {
            // 将字符串值转为int类型
            if (int.TryParse(filter.Value?.ToString(), out int idValue))
            {
                filter.Value = idValue;
            }
            // 如果是模糊搜索需求,需替换为合适的数值操作符,或者自定义过滤逻辑
            // 比如将Id转为字符串后进行Contains匹配,示例:
            // filter.Operator = FilterOperator.Contains;
            // filter.Value = idValue.ToString();
        }
    }
}

return Json(lstofToolAction.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);

方法三:全局自定义数值字段过滤处理

如果有多个数值类型字段需要处理,可以扩展ToDataSourceResult方法,统一处理数值类型字段的过滤条件转换,避免逐个字段修改的重复工作。

内容的提问来源于stack exchange,提问作者Chundya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:40:27