And*_*rts 3 .net filtering case-insensitive odata kendo-grid
我正在尝试为kendo网格启用不区分大小写的过滤(服务器端).有没有人知道一种方法将filower(toupper等)注入过滤器以启用不区分大小写的过滤?
背景:
我删除了一个kendo网格来使用来自控制器(EntitySetController.NET 4.5)的数据,所有这些似乎都运行得很好.内联编辑,服务器分页,添加新行等.
为了能够与淘汰赛不区分大小写的过滤,我只想构建具有过滤文本和现场包裹在tolower的过滤器(如建议在这里).我还没有找到使用kendo元素自定义过滤器的方法.
控制器:
public class CategoriesController : EntitySetController<Category, int>
{
public override IQueryable<Category> Get()
{
return _repository.Find().OrderBy(c => c.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
数据源创建:
var serviceBaseUrl = "api/Categories",
dataSource = new kendo.data.DataSource({
type: "odata",
transport: {
read: {
url: serviceBaseUrl,
dataType: "json"
}
},
schema: {
// omitted for brevity
},
serverFiltering: true,
serverPaging: true,
pageSize: 10
});
Run Code Online (Sandbox Code Playgroud)
网格创建:
$("#grid").kendoGrid({
dataSource: dataSource,
pageable: true,
filterable: {
extra: false,
operators: {
string: {
contains: "Contains",
}
}
},
columns: [
// omitted for brevity
]
});
Run Code Online (Sandbox Code Playgroud)
基于完全缺乏响应,我猜很少有其他人遇到这个问题,并没有看到我最终想出的明显解决方案.为了防止其他一些可怜的灵魂像我一样陷入困境,这就是我想出来的.
数据源上的传输对象需要一个名为parameterMap的函数.在那,做类似以下的事情:
parameterMap: function (data, type) {
if (type == "read") {
if (nameFilter) { // pull nameFilter from a viewmodel or wherever
data.filter = {
field: "tolower(Name)",
operator: "contains",
value: nameFilter.toLowerCase()
};
}
var newData = kendo.data.transports.odata.parameterMap(data);
delete newData.$format; // not currently supported by webapi.
return newData;
}
},
Run Code Online (Sandbox Code Playgroud)
为了这个答案的目的,我做了一些简化,所以如果这个例子被破坏了,请道歉.我尽力让它真正起作用.
| 归档时间: |
|
| 查看次数: |
5398 次 |
| 最近记录: |