Kendo Grid Filterable报错:无Operators和Messages定义求助
解决Kendo Grid Filterable配置的两类错误
嘿,我帮你分析下你遇到的这两个编译错误,都是因为配置结构写错导致的,一起来看看怎么修复:
错误原因拆解
1. Kendo.Filterable 不包含“Operators”的定义
你直接在Filterable()根节点调用Operators()是不对的,这个方法需要针对特定的数据类型(比如日期、字符串、数字)来嵌套配置,比如给日期列设置专属的筛选操作符,得用.Operators(op => op.ForDate(...)这种结构。
2. Filterable针对操作数不包含“Messages”的定义
如果要配置筛选的提示文案,同样得放到正确的层级里——要么在全局Filterable的.Messages()里设置,要么在单个列的Filterable配置里加,不能随便和操作数配置平级嵌套。
另外还有个隐藏的大问题:你把DataSource()写到Filterable()里面了!DataSource是Grid的顶级配置项,得和Sortable、Selectable同级,这也是引发错误的核心原因之一。
修正后的完整代码
@(Html.Kendo().Grid<IoInfo>() .Name("IOInfo") .Columns(columns => { columns.Bound(p => p.BeginDate) .Format("{0:MM, dd, yyyy}") .Width(150) // 原宽度15太窄,调整成150保证内容正常显示 .Title(Html.LabelFor(m => ioInfo.BeginDate).ToString()); columns.Bound(p => p.BeginTime) .Width(150) .Title(Html.LabelFor(m => ioInfo.BeginTime).ToString()); columns.Bound(p => p.EndDate) .Format("{0:MM, dd, yyyy}") .Width(150) .Title(Html.LabelFor(m => ioInfo.EndDate).ToString()); columns.Bound(p => p.EndTime) .Width(150) .Title(Html.LabelFor(m => ioInfo.EndTime).ToString()); }) .Sortable(x => x.Enabled(true)) .Selectable(x => x.Enabled(true)) .Filterable(filterable => filterable .Extra(false) // 正确配置日期类型列的筛选操作符 .Operators(op => op .ForDate(dateOps => dateOps .IsEqualTo("等于") .IsGreaterThan("晚于") .IsGreaterThanOrEqualTo("晚于或等于") .IsLessThan("早于") .IsLessThanOrEqualTo("早于或等于") .Clear("清除") ) // 如果需要给其他类型列配置操作符,比如字符串,可添加.ForString(strOps => ...) ) // 可选:配置全局筛选的提示文案,不需要可以删除这段 .Messages(msg => msg .Info("筛选条件") .And("且") .Or("或") .Filter("应用筛选") .Clear("清除筛选") ) ) // 把DataSource移到Grid的顶级配置层级,这是正确的位置 .DataSource(dataSource => dataSource .Ajax() .ServerOperation(false) .Read(read => read.Action("BindGrid", "Person")) ) )
关键修正点
- 把
Operators()放到了Filterable()的正确嵌套结构中,针对你的日期/时间列配置了对应操作符 - 调整了列宽度(原15会导致内容被挤压,150更合理)
- 将
DataSource移到了Grid的顶级配置层级,纠正了最严重的结构错误 - 补充了全局筛选Messages的配置示例(按需保留或删除)
内容的提问来源于stack exchange,提问作者liaeb
相关产品推荐
相关产品推荐

