我正在尝试在Kendo Grid上实现OData来评估性能(我使用过Entity Framework,内联sql等)。在我的api项目中,我使用OData v4,因为这似乎是Telerik使用的。在我的api控制器中,我有:
[HttpGet]
[Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
[EnableCors(origins: "http://localhost:50264", headers: "*", methods: "*")]
public IQueryable<vNPISearch> Search(string id)
{
return !String.IsNullOrEmpty(id) ? oandpService.GetPecosQueryable(id) : Enumerable.Empty<vNPISearch>().AsQueryable();
}
我的网格看起来像:
@(Html.Kendo().Grid<vNPISearch>()
.Name("npi-grid")
.Columns(columns =>
{
columns.Template(x => { }).ClientTemplate("#=GetPecosStatus(PecosNPI) #").Width(50);
columns.Bound(x => x.ProviderFirstName).Title("First Name");
columns.Bound(x => x.ProviderLastName).Title("Last Name");
columns.Bound(x => x.ProviderBusinessLocationAddressCity).Title("City");
columns.Bound(x => x.ProviderBusinessLocationAddressState).Title("State");
columns.Bound(x => x.NPI).Title("NPI");
})
.DataSource(dataSource => dataSource
.Custom()
.Schema(sch =>
{
sch.Model(m =>
{
m.Id("NPI");
m.Field(f => f.NPI).Editable(false);
m.Field(f => f.ProviderFirstName).Editable(false);
m.Field(f => f.ProviderLastName).Editable(false);
m.Field(f => f.ProviderBusinessLocationAddressCity).Editable(false);
m.Field(f => f.ProviderBusinessLocationAddressState).Editable(false);
});
})
.Type("odata")
.Transport(transport =>
{
transport.Read(read =>
{
read.Url("http://localhost:58242/api/PecosSearch/Search?id=" + Model.SearchTerm);
read.DataType("json");
});
})
.PageSize(20)
.ServerPaging(true)
.ServerSorting(true)
.ServerFiltering(true)
)
.Scrollable(scr => scr.Height("auto"))
.Sortable()
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5))
)
当我转到搜索页面时,它有一个搜索文本框和网格。当我针对它运行查询时,我得到了&#34;查询参数&#39; $ count&#39;不受支持。&#34;
如果我删除Postman中的$ count,则API有效。
知道发生了什么事吗?
谢谢,
AJ
答案 0 :(得分:0)
我认为您必须使用ToDataSourceResult
扩展方法从服务器返回此值。
using using Kendo.Mvc.Extensions;
public ActionResult Search(string id, [DataSourceRequest] DataSourceRequest request){
return !String.IsNullOrEmpty(id) ? oandpService.GetPecosQueryable(id).ToDataSourceResult(request) : Enumerable.Empty<vNPISearch>().AsQueryable().ToDataSourceResult(request);
}
编辑:将集合更改为ActionResult将允许数据通过。