Kendo MVC 网格多列过滤器
Kendo MVC Grid Multiple Column Filters
我无法让我的网格过滤超过 1 列。当我尝试添加第二个过滤器时,出现 500 错误。它永远不会影响我的控制器 POST 操作。我在 2 个不同的网格和数据源上遇到了这种行为。
网格(缩写示例):
@(Html.Kendo().Grid<FooItemViewModel>()
.Name("FooGrid")
.Columns(column =>
{
column.Bound(p => p.FooTypeCode).Title("Type").Width(22);
column.Bound(p => p.FooCode).Title("Foo Code").Width(40);
column.Bound(p => p.FooDesc).Title("Foo Description").Width(260);
column.Bound(p => p.ReportCode).Title("Report").Width(20);
})
.Filterable()
.Sortable()
.Pageable(builder => builder.PageSizes(new[] { 10, 25, 100 }))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(25)
.Model(m =>
{
m.Id(s => s.FooID);
m.Field(s => s.FooID).Editable(false);
})
.Read(read => read.Action("Read", "Foo")) // kendo adds its datasourcerequest on first 2 calls (empty & filter 1)
.Create(create => create.Action("Create", "Foo"))
.Update(update => update.Action("Update", "Foo"))
.Destroy(update => update.Action("Delete", "Foo"))
.Events(events => events.Error("onDataSourceError"))
))
控制器:
public JsonResult Read([DataSourceRequest] DataSourceRequest request)
{
var Foos = _db.Foos.Project().To<FooItemViewModel>();
DataSourceResult response = Foos.ToDataSourceResult(request);
return Json(response, JsonRequestBehavior.AllowGet);
}
第一次加载网格时,我按预期使用空数据源请求点击了读取操作。当我添加过滤器时,我还使用数据源请求命中了服务器读取操作,并传入了预期的列过滤器。当我 select 第二列过滤器并单击 "Filter" 我得到 500 错误,即使它看起来就像一个非常相似的请求:
实际上,当我查看 2 POST 时,它们很相似:
Working request:
sort=&page=1&pageSize=25&group=&filter=FooCode~contains~'10.1'
Request URL: http://localhost:61556/Foo/Read
Request Method: POST Status Code: 200 OK Remote Address: [::1]:61556
Referrer Policy: no-referrer-when-downgrade
Failing request: sort=&page=1&pageSize=25&group=&filter=FooCode~contains~'10.1'~and~FooDesc~contains~'hunt'
Request URL: http://localhost:61556/Foo/Read Request Method: POST
Status Code: 500 Internal Server Error Remote Address: [::1]:61556
Referrer Policy: no-referrer-when-downgrade
原来这是 2017.3 版本中的一个错误。从 2017.3.1018 更新到 2017.3.1026 解决了这个问题。看这里:https://www.telerik.com/forums/asp-net-mvc-grid-multiple-column-filters#x0VfO3YHlkebR81muGeXbg
我无法让我的网格过滤超过 1 列。当我尝试添加第二个过滤器时,出现 500 错误。它永远不会影响我的控制器 POST 操作。我在 2 个不同的网格和数据源上遇到了这种行为。
网格(缩写示例):
@(Html.Kendo().Grid<FooItemViewModel>()
.Name("FooGrid")
.Columns(column =>
{
column.Bound(p => p.FooTypeCode).Title("Type").Width(22);
column.Bound(p => p.FooCode).Title("Foo Code").Width(40);
column.Bound(p => p.FooDesc).Title("Foo Description").Width(260);
column.Bound(p => p.ReportCode).Title("Report").Width(20);
})
.Filterable()
.Sortable()
.Pageable(builder => builder.PageSizes(new[] { 10, 25, 100 }))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(25)
.Model(m =>
{
m.Id(s => s.FooID);
m.Field(s => s.FooID).Editable(false);
})
.Read(read => read.Action("Read", "Foo")) // kendo adds its datasourcerequest on first 2 calls (empty & filter 1)
.Create(create => create.Action("Create", "Foo"))
.Update(update => update.Action("Update", "Foo"))
.Destroy(update => update.Action("Delete", "Foo"))
.Events(events => events.Error("onDataSourceError"))
))
控制器:
public JsonResult Read([DataSourceRequest] DataSourceRequest request)
{
var Foos = _db.Foos.Project().To<FooItemViewModel>();
DataSourceResult response = Foos.ToDataSourceResult(request);
return Json(response, JsonRequestBehavior.AllowGet);
}
第一次加载网格时,我按预期使用空数据源请求点击了读取操作。当我添加过滤器时,我还使用数据源请求命中了服务器读取操作,并传入了预期的列过滤器。当我 select 第二列过滤器并单击 "Filter" 我得到 500 错误,即使它看起来就像一个非常相似的请求:
实际上,当我查看 2 POST 时,它们很相似:
Working request: sort=&page=1&pageSize=25&group=&filter=FooCode~contains~'10.1'
Request URL: http://localhost:61556/Foo/Read
Request Method: POST Status Code: 200 OK Remote Address: [::1]:61556 Referrer Policy: no-referrer-when-downgrade
Failing request: sort=&page=1&pageSize=25&group=&filter=FooCode~contains~'10.1'~and~FooDesc~contains~'hunt'
Request URL: http://localhost:61556/Foo/Read Request Method: POST Status Code: 500 Internal Server Error Remote Address: [::1]:61556 Referrer Policy: no-referrer-when-downgrade
原来这是 2017.3 版本中的一个错误。从 2017.3.1018 更新到 2017.3.1026 解决了这个问题。看这里:https://www.telerik.com/forums/asp-net-mvc-grid-multiple-column-filters#x0VfO3YHlkebR81muGeXbg