kendo ui网格过滤器不区分大小写

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)

And*_*rts 8

基于完全缺乏响应,我猜很少有其他人遇到这个问题,并没有看到我最终想出的明显解决方案.为了防止其他一些可怜的灵魂像我一样陷入困境,这就是我想出来的.

数据源上的传输对象需要一个名为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)

为了这个答案的目的,我做了一些简化,所以如果这个例子被破坏了,请道歉.我尽力让它真正起作用.