【问题标题】:Kendo Grid - oData - Web API- Server Side Paging, Filtering - Decimal TypeKendo Grid - oData - Web API - 服务器端分页、过滤 - 十进制类型
【发布时间】:2014-10-06 02:42:53
【问题描述】:

我已经使用以下设置了剑道网格:

  1. 带有 oDataController 的 ASP.NET Web API 使用 oData 格式读取数据。
  2. 带有 oData 数据源的 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 过滤时,对于诸如十进制、双精度、日期时间等某些类型,您必须根据本文在 URL 中明确指定类型:http://microliteorm.wordpress.com/2013/09/06/webapi-odata-filtering/

在指定网格中的列类型方面,数字只有一种类型,即“数字”。它没有双精度、十进制、整数等不同的类型。当对“数字”列使用过滤时,如何告诉 Kendo 网格在 URL 中指定实际类型(即双精度、十进制等)。请注意,过滤适用于日期时间类型。这只是数字类型的问题。

编辑: 在 oData 上找到这篇文章(第 6 节),它指定了原始数据类型必须如何在 URI 中表示 - http://www.odata.org/documentation/odata-version-2-0/overview/

【问题讨论】:

  • 哎呀,也遇到了这个问题。你找到解决方法了吗?我不想做一些疯狂的字符串替换或在我的过滤器文本末尾添加“m”的东西。
  • 我也被这个问题困住了......

标签: kendo-ui kendo-grid kendo-asp.net-mvc


【解决方案1】:

Kendo UI 不支持特定的数字数据类型,例如 intfloatdecimal。在这个框架和 JavaScript 中,所有这些都只是数字。 Kendo 提供了number 作为一种有助于您理解的类型抽象,而不是浏览器或服务器的解释器。

正如 Jeremy 在他的评论中暗示的那样,在将其发送到服务器之前,您必须将 0.5 的值替换为 0.5mKendo UI DataSource 仅提供了执行此操作的方法。

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'
      }
    }
  }
});

【讨论】:

    【解决方案2】:

    我觉得与其转换传入的数据流,不如转换那个过滤器可能更有效和方便,这将是一个独特项目的转换,当它需要转换时。 为此,请查看您的 ODATA 包装器,它会在其中查询源。它应该有一个作为参数传入的 state 属性,并且该 state 属性有一个 filter 属性,它本身是一个 FilterDescriptor 对象的树。你会想要操纵这些,而不是你的所有数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 2013-11-23
      相关资源
      最近更新 更多