我已使用以下内容设置了kendo网格:
除了过滤不能使用十进制类型的列之外,所有内容都可以正常工作。在十进制类型列上使用过滤时,kendo会生成具有以下过滤器值的URL:
$filter=Value gt 0.5
Web API返回Bad Request,其中包含以下内容:
{
"odata.error":{
"code":"","message":{
"lang":"en-US","value":"A binary operator with incompatible types was detected. Found operand types 'Edm.Decimal' and 'Edm.Double' for operator kind 'GreaterThan'."
}
}
}
如果我使用URL并在0.5的末尾添加“M”以明确指定小数类型,那么它工作正常。显然,在使用Web API oData过滤时,对于某些类型(如decimal,double,datetime),您必须按照本文明确指定URL中的类型:http://microliteorm.wordpress.com/2013/09/06/webapi-odata-filtering/
在网格中指定列类型方面,只有一种数字类型是“数字”。它没有double,decimal,integer等的不同类型。当在“number”列上使用过滤时,如何告诉Kendo网格指定URL中的实际类型(即double,decimal等)。请注意,过滤适用于日期时间类型。这只是数字类型的问题。
编辑: 在oData上找到这篇文章(第6节),它指定了如何在URI中表示原始数据类型 - http://www.odata.org/documentation/odata-version-2-0/overview/
答案 0 :(得分:1)
Kendo UI不支持int
,float
或decimal
等特定数字数据类型。在这个框架和JavaScript中,所有这些都只是数字。 Kendo提供number
作为类型抽象,对您的理解有用,而不是浏览器或服务器的解释器。
正如Jeremy在评论中暗示的那样,在将0.5
发送到服务器之前,您必须将0.5m
的值替换为var ds = new kendo.data.DataSource({
transport: {
//...other implementation details removed for brevity
parameterMap: function(data, type) {
if (type === 'read') {
//...covert decimal values in the `data.filter` to strings ending with 'm'
}
}
}
});
。 Kendo UI DataSource提供了执行此操作的方法。
<div id="nyc_data">
<a href="#nyc_pics" class="hidden">nyc</a>
</div>
<div id="la_data">
<a href="#la_pics" class="hidden">la</a>
</div>
<div id="san_data">
<a href="#san_pics" class="hidden">san</a>
</div>
答案 1 :(得分:0)
我认为,转换过滤器可能更有效,更方便,而不是转换进来的数据流,一旦需要转换,这将是一个唯一项目的转换。 为此,请查看ODATA包装器,查询源代码。它应该有一个作为参数传入的state属性,并且该state属性有一个filter属性,它本身就是FilterDescriptor对象的树。您可能希望操纵这些,而不是所有数据。