如何强制jqgrid使用查询字符串中的OData查询数据

免费的jqgrid使用读取远程json数据

$.jgrid.useJSON = true; $.extend(true, $.jgrid.defaults, { mtype: 'GET', url: '@Html.Raw(Url.Action("Entity", "API",))' } ); 

搜索窗口是使用定义的

 $.extend(true, $.jgrid.search, { multipleSearch: true, recreateFilter: true, closeAfterSearch: true, overlay: 0, recreateForm: true }); 

如果按下搜索按钮,则会创建丑陋的filter查询字符串参数

 http://localhost:52216/admin/API/Entity/DoklstlG?search=true&nd=1448746804617&rows=20&page=1&sidx=customer&_sord=desc&filters=%7B%22groupOp%22%3A%22AND%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22Klient_nimi%22%2C%22op%22%3A%22cn%22%2C%22data%22%3A%22a%22%7D%5D%7D 

如何更改此url,尤其是以OData格式生成的filters子句? 我阅读了jqgrid OData插件wiki文章,但还没有找到这种可能性。

我不能建议您准备好使用解决方案,但我指出了如何实现该要求的方向。

首先,我建议你阅读答案 ? 它显示了如何使用OData的服务器端排序和分页。 需要使用$top$skip$orderby$inlinecount URI参数,这些参数可以在serializeGridData设置。 可以以相同的方式实现过滤。 需要将由jqGrid创建的filters参数转换为对象并解析所有规则。 需要生成相应的$filter参数,它支持OData(就像这里和这里一样 )。 重要的是要理解通用实现并不那么容易,它可能取决于您使用的OData实现的确切版本。