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

Kendo Grid服务端过滤时C#控制器无法获取Filter对象求助

问题排查与解决方案

我帮你梳理下代码里可能导致无法获取filter参数的几个关键点,一步步来解决:

1. Kendo Grid配置项的大小写问题

Kendo UI的配置项是小驼峰命名,你代码里的ServerOperation: true应该改成serverOperation: true,这个错误会直接导致服务端操作的配置不生效,进而干扰filter参数的正常传递。

2. 移除read.data函数里的多余操作

你在read的data回调里手动调用了grid.dataSource.filter(e.filter),这会重复设置过滤条件,打乱Kendo原本的参数生成逻辑。直接返回e即可,不需要额外操作:

data: function (e) {
    // 移除这两行多余的操作
    // var grid = $("#grid").data("kendoGrid");
    // grid.dataSource.filter(e.filter);
    console.log(e);
    return e;
}

3. 控制器参数绑定优化

你的控制器参数里,[DataSourceRequest] DataSourceRequest filter的命名容易混淆,而且完全不需要单独声明pageSize、skip等参数——DataSourceRequest对象已经包含了分页、过滤、排序等所有服务端操作的参数。另外,因为你用POST请求且发送的是JSON格式,需要给DataSourceRequest加上[FromBody]特性,确保ASP.NET能正确解析JSON参数:

// 修改后的控制器方法
public JsonResult GetAllPartnersContactDetails1([FromBody][DataSourceRequest] DataSourceRequest request)
{
    var objPartnersModel = new PartnersModel();
    // 直接使用request内置的Skip和Take属性
    var dataSet = objPartnersModel.GetAllPartnersContactDetails()
        .Skip(request.Skip)
        .Take(request.PageSize)
        .ToList();
    var recordCount = objPartnersModel.GetAllPartnersContactDetails().Count();
    
    DataSourceResult result = new DataSourceResult()
    {
        Data = dataSet,
        Total = recordCount
    };
    return Json(result, JsonRequestBehavior.AllowGet);
}

4. 确认必要的依赖与配置

确保你的项目已经引用了Kendo.Mvc.dll,并且在Web.config里注册了Telerik的模型绑定器:

<system.web>
  <httpHandlers>
    <add path="*" verb="*" type="Kendo.Mvc.HttpHandler.KendoHttpHandlerFactory, Kendo.Mvc" />
  </httpHandlers>
</system.web>
<system.webServer>
  <handlers>
    <add name="KendoHttpHandler" path="*" verb="*" type="Kendo.Mvc.HttpHandler.KendoHttpHandlerFactory, Kendo.Mvc" />
  </handlers>
</system.webServer>

同时在Global.asax里注册Telerik的模型绑定器(ASP.NET MVC项目):

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    // 注册Kendo数据源请求模型绑定器
    ModelBinders.Binders.Add(typeof(DataSourceRequest), new DataSourceRequestModelBinder());
}

5. 合并重复的filterable配置

你在Grid配置里重复写了两次filterable,这会导致后面的配置覆盖前面的,虽然不直接影响参数传递,但可能导致过滤UI异常,建议合并成一个:

filterable: {
    mode: "row",
    operators: {
        string: {
            contains: 'containsStringFilter', eq: 'eqStringFilter', neq: 'neqStringFilter',
            isnull: 'isnullStringFilter', isnotnull: 'isnotnullStringFilter',
            isempty: 'isemptyStringFilter', isnotempty: 'isnotemptyStringFilter',
            startswith: 'startswithStringFilter', doesnotcontain: 'doesnotcontainStringFilter',
            endswith: 'endswithStringFilter', isnullorempty: 'isnulloremptyStringFilter',
            isnotnullorempty: 'isnotnulloremptyStringFilter',
        }
    },
    messages: { and: "And", or: "Or", info: "ShowItems" }
},

做完这些修改后,重新测试:打开浏览器控制台查看POST请求的Payload,确认filter参数已正确序列化;然后在控制器打断点,检查request.Filters是否有值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:36:16