带有ODataAction的Kendo UI Grid绑定到集合

时间:2014-03-22 18:06:49

标签: http web asp.net-web-api odata kendo-grid

我正在尝试将 Kendo UI 网格与 ODataAction 结合使用。在这种情况下,我应该在网格dataSource中将请求类型指定为POST。但在这种情况下,我失去了排序,过滤等功能,因为OData参数在请求体中传递,OData Controller无法解析它。

 URL example: "/odata/MyEntityCollection/MyCustomAction"

目前我正在使用绑定到OData服务本身的操作来避免该问题。

URL example: "/odata/MyCustomAction"

不需要POST操作。但过了一段时间后,我得到了很多方法,它变得非常混乱。

有没有人有类似的问题?有没有更好的方法来避免ODataAction限制?

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果将WebApi OData升级到最新版本,则可以解决此问题。现在它是5.2.0-alpha1-140307。

请参考此示例: http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataFunctionSample/

其中的Top10方法可以很好地解决您的问题。您需要做的唯一事情是在ProductsController.cs中将[EnableQuery]添加到Top10中。就像这样:

[HttpGet]
[EnableQuery]
public IHttpActionResult Top10()
{
    var retval = _data.Values.OrderByDescending(p => p.Price).Take(10).ToList();
    return Ok(retval);
}

然后您可以安全地向URL添加查询选项,例如

GET http://localhost:9010/odata/Products/Default.Top10()?$orderby=Id desc&$filter=Id gt 46

StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  OData-Version: 4.0
  Date: Mon, 24 Mar 2014 09:54:57 GMT
  Server: Microsoft-HTTPAPI/2.0
  Content-Length: 304
  Content-Type: application/json; odata.metadata=minimal; odata.streaming=true;
charset=utf-8
}
{
  "@odata.context":"http://localhost:9010/odata/$metadata#Products","value":[
    {
      "Id":95,"Name":"Product 95","Price":998.542812186546
    },{
      "Id":88,"Name":"Product 88","Price":993.66847052875369
    },{
      "Id":58,"Name":"Product 58","Price":932.89687947039351
    }
  ]
}

注意:

  1. 新版API的名称已从System.Web.Http.OData更改为System.Web.OData。
  2. 可以在示例中的packages.config中找到该版本。