Kendo DropDownList 使用Filter("contains")过滤功能异常问题咨询
Kendo DropDownList 过滤功能不生效解决方案
- 服务端过滤适配问题
你当前配置了.ServerFiltering(true),此时过滤逻辑不由前端处理,Kendo只会将过滤关键字作为请求参数传给后端接口Cascading_Get_Sources,需要后端接口接收过滤参数,按照contains规则匹配SourceDataSource字段后返回过滤结果,功能才能正常生效。如果下拉框数据量不大,可以直接将该配置改为.ServerFiltering(false),前端会自动在已加载的数据源中完成过滤,无需后端改造,示例如下:
@(Html.Kendo().DropDownList() .Name("DropdownSourceDatasourceType") .HtmlAttributes(new { style = "width:100%", @id = "DropdownSourceDatasourceType", @onchange = "changes=true;" }) .OptionLabel("Select") .Filter("contains") .DataTextField("SourceDataSource") .DataValueField("SourceDataSourceID") .DataSource(source => { source.Read(read => { read.Action("Cascading_Get_Sources", "Admin") .Data("filterClients"); }) // 修改为前端过滤 .ServerFiltering(false); }) .Enable(false) .AutoBind(false) .CascadeFrom("ClientName") .CascadeFromField("SourceDataSource") )
- 自定义参数覆盖问题
你在Read配置中指定了.Data("filterClients")自定义传参方法,如果该方法没有拼接Kendo默认传递的过滤参数,会导致后端收不到过滤关键字,过滤失效。可以先临时移除该配置测试过滤是否正常,确认问题后改造filterClients方法,补充过滤参数传递逻辑:
function filterClients() { return { clientId: $("#ClientName").val(), // 补充传递当前下拉框的过滤关键字 filter: $("#DropdownSourceDatasourceType").data("kendoDropDownList").filterInput.val() }; }
- 级联加载冲突问题
当前组件配置了AutoBind(false)和CascadeFrom("ClientName"),需要确认父组件ClientName选中值后,当前下拉框的数据源已经完成加载,未加载的数据源无法触发过滤逻辑。可以临时修改AutoBind(true)、Enable(true)并移除级联配置做隔离测试,排除加载流程带来的问题。 - 字段匹配问题
确认后端返回的数据源中,每条数据都存在SourceDataSource字段,且字段名称大小写、拼写完全和DataTextField配置一致,字段类型为字符串类型,否则前端无法匹配到对应内容完成过滤。
内容的提问来源于stack exchange,提问作者test
相关产品推荐
相关产品推荐

