如何强制Kendo Grid在列上使用数字filter

使用以下代码,Kendo Grid使用t.Files.Count的字符串filter接口,即使类型是int 。 如何强制网格使用数字filterUI?

 @(Html.Kendo().Grid() .Name("grid") .Columns(columns => { columns.Bound(t => t.ID).Width(80); columns.Bound(t => t.OrbitalPeriod); columns.Bound(t => t.Files.Count); }) .Sortable() .Filterable() .DataSource(dataSource => dataSource.Ajax() .PageSize(20) .Read(read => read.Action("Targets_Read", "Targets")) ) .Resizable(o => o.Columns(true)) .ColumnMenu() ) 

为字符串生成filter菜单:

过滤菜单

我使用的是Kendo.MVC 2013.1.514.340

解决方案是指定值是模型中的int – 更改DataSource方法,如下所示:

 .DataSource(dataSource => dataSource.Ajax() .PageSize(20) .Read(read => read.Action("Targets_Read", "Targets")) .Model(m => { m.Field(t => t.Files.Count); }) ) 

您也可以使用此解决方案:

 .DataSource(dataSource => dataSource.Ajax() .PageSize(20) .Read(read => read.Action("Targets_Read", "Targets")) .Model(m => { m.Field("Files.Count", typeof(System.Int32)); }) ) 

当我的数据类型是“数字”时,我遇到了类似问题,当数据类型字符串为过时,如果在声明模式时存在差异,请确保在模式中声明的字段是正确的,即与您获取/提供给网格的数据。

Kendo将能够为每列选择正确的filter类型,但您必须使用属性而不是TargetsModel字段

例如,使用此:

 public class TargetsModel { public int ID { get; set; } public string OrbitalPeriod { get; set; } ... } 

而不是这个:

 public class TargetsModel { public int ID; public string OrbitalPeriod; ... } 

如果由于某种原因你无法做到这一点, .Model()方法可能是最好的方法。