如何将Kendo Grid AutoComplete绑定到Razor MVC模型列表
我之前也踩过Kendo AutoComplete绑定的坑,结合你的描述,咱们从这几个方向排查:
先确认控件使用是否正确
你写的@Html.ColumnDropDownFor看起来像是自定义的下拉扩展,但你要的是AutoComplete功能,建议改用Kendo官方的AutoCompleteFor辅助方法,写法大概是这样:@(Html.Kendo().AutoCompleteFor(model => model.Owner) .DataTextField("Text") // 这里要和你的KeyValueSelectList里的文本字段名完全对应 .DataValueField("Value") // 对应数据源里的值字段名 .BindTo(Model.OwnerList.ToKeyValueSelectList()) )一定要保证
DataTextField和你ToKeyValueSelectList()生成的集合里的文本属性名一致——比如如果你的扩展生成的是Name而不是Text,这里就会找不到匹配的文本内容。检查数据源的实际结构
虽然你说集合在其他控件能用,但AutoComplete对字段映射的要求更严格。可以打开浏览器控制台,执行以下命令查看数据源:$("#Owner").data("kendoAutoComplete").dataSource.data()确认每条数据里的文本字段存在且有有效值,没有空字符串或者格式错误的情况。
调整匹配逻辑
Kendo AutoComplete默认是前缀匹配,如果用户输入的是字符串中间的字符,默认不会触发匹配。如果需要包含匹配,记得加上Filter配置:.Filter(FilterType.Contains)验证字段类型一致性
确保model.Owner的类型和数据源里Value字段的类型完全一致——比如如果Value是int类型,Owner也得是int,类型不匹配会导致选中后无法正确绑定,或者看起来没有匹配结果。排查自定义扩展方法
你用的ToKeyValueSelectList()是自定义扩展吗?可以临时替换成原生的SelectList试试:.BindTo(new SelectList(Model.OwnerList, "Id", "Name"))把
Id和Name换成你集合里实际的键值字段名,如果这样能正常工作,那问题就出在你的自定义扩展方法里,可能它生成的SelectListItem的Text或Value有异常。
内容的提问来源于stack exchange,提问作者Casey ScriptFu Pharr

