我无法让我的网格过滤超过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);
}
当网格首次加载时,我按预期使用空datasourcerequest命中Read操作。当我添加一个过滤器时,我也使用datasourcerequest命中服务器读取操作并传入预期的列过滤器。当我选择第二列过滤器并单击&#34;过滤&#34;我得到500错误,即使它看起来像一个非常相似的请求:
实际上,当我查看2个帖子时,它们是相似的:
工作要求: 排序=安培;页= 1&安培;的pageSize = 25安培;组=安培;过滤器= FooCode〜包含〜&#39; 10.1&#39;
请求网址:http://localhost:61556/Foo/Read
请求方法:POST状态码:200 OK远程地址:[:: 1]:61556 推荐人政策:no-referrer-when-downgrade
请求失败:sort =&amp; page = 1&amp; pageSize = 25&amp; group =&amp; filter = FooCode~ contains~&#39; 10.1&#39;〜和~FooDesc~包含〜&#39; hunt&# 39;
请求网址:http://localhost:61556/Foo/Read请求方法:POST 状态代码:500内部服务器错误远程地址:[:: 1]:61556 推荐人政策:no-referrer-when-downgrade
答案 0 :(得分:0)
原来这是2017.3版本中的一个错误。从2017.3.1018更新到2017.3.1026解决了这个问题。见这里:https://www.telerik.com/forums/asp-net-mvc-grid-multiple-column-filters#x0VfO3YHlkebR81muGeXbg