使用KendoGrid进行过滤,MVC无法正常工作

时间:2015-03-04 23:41:12

标签: asp.net-mvc telerik kendo-grid kendo-ui-mvc

我正在使用KendoUI,我想对它如何进行过滤进行一些研究。我在下面看到了一段代码:

http://demos.telerik.com/aspnet-mvc/grid/filter-row

我写了一段代码如下:

<div id="clientsDb">
        @(Html.Kendo().Grid<Prometheus.Core.Domain.Employee>()
              .Name("employeeGrid")
              .Columns(columns =>
              {
                  columns.Bound(c => c.Id).Width(140).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains")));
                  columns.Bound(c => c.FirstName).Width(190).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains")));
                  columns.Bound(c => c.LastName);
              })
              .HtmlAttributes(new {style = "height: 380px;"})
              .Scrollable()
              .Groupable()
              .Sortable()
              .Pageable(pageable => pageable
                  .Refresh(true)
                  .PageSizes(true)
                  .ButtonCount(5))
              .DataSource(dataSource => dataSource
                  .Ajax()
                  .Read(read => read.Action("ReadEmployee", "EmployeeGrid"))))

我没有看到任何错误,但我没有看到任何搜索过滤器在网格中的任何位置启用。

但是,以下代码对我来说很好,它在网格级别添加过滤器而不是在列级别添加过滤器:

<div id="clientsDb">
        @(Html.Kendo().Grid<Prometheus.Core.Domain.Employee>()
              .Name("employeeGrid")
              .Columns(columns =>
              {
                  columns.Bound(c => c.Id).Width(140).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains")));
                  columns.Bound(c => c.FirstName).Width(500).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains")));
                  columns.Bound(c => c.LastName);
              })
              .HtmlAttributes(new { style = "height: 380px;" })
              .Scrollable()
              .Groupable()
              .Sortable()
              .Selectable()
              .Pageable(pageable => pageable
                  .Refresh(true)
                  .PageSizes(true)
                  .ButtonCount(5))
                  .Filterable(filterable => filterable
                .Extra(true)
                .Operators(operators => operators
                    .ForString(str => str.Clear()
                        .Contains("Contains")
                        .IsEqualTo("Exactly matches")
                        .StartsWith("Starts with")
                        .DoesNotContain("Does not contain")
                        .EndsWith("Ends with")
                        .IsNotEqualTo("Is not equal to")
                    ))).DataSource(dataSource => dataSource
                  .Ajax()
                  .Read(read => read.Action("ReadEmployee", "EmployeeGrid"))))
        </div>

我不确定这里有什么大不同,因为两者都使用了几乎相同的可过滤属性。任何想法?

2 个答案:

答案 0 :(得分:0)

我认为您需要在第一个代码中应用Filterable()。

答案 1 :(得分:0)

我知道这是一个非常晚的回复,但您需要在第一个示例中在网格级别添加.Filterable(filter => filter.Mode(GridFilterMode.Row))。值得注意的是,为了在列中使用.Cell(etc...)样式,它需要处于行过滤模式,因为菜单模式不支持每列选项。

关于为什么会这样,这将是一个很好的问题,但确实如此。