背景:
我有一个使用以下技术的现有网站:
ASP.NET MVC5,
KnockoutJS,
Kendo UI 2014.1.318
Web API 2
OData v3
我网站上有很多 Kendo网格,一切都很好。直到现在,那是......当我开始整合 Durandal 时。
问题:
95%的网格完全正常,但其中有2个正在从 OData v3 Action (POST操作)中获取数据。例如:
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
[HttpPost]
public IQueryable<ServiceInfoResult> GetServices(ODataActionParameters parameters)
{
}
是的,这很不寻常,但由于我不会进入的原因,我的数据来自 OData(POST)行动。网格通常工作正常,我只需要确保设置以下内容:
schema: {
data: function (data) {
return data.value;
},
total: function (data) {
//return data["odata.count"]; // this is the one normally used for other grids, but not here...
// instead, I need to use the following and do paging locally, which is fine, since there's a VERY small number of records, so there's no issue.
return data.value.length;
},
//etc
}
无论如何,既然我正在使用 Durandal / RequireJS ,那就会发生一些奇怪的事情......;在第一次加载时,一切看起来都很好,但是当点击一个页面(2,3,4等等)时,网格会显示所有记录,即使在网格的页脚上它仍然显示{{1}并且有页码。
再说一遍,我说之前工作正常。有没有人知道为什么会发生这种情况以及我能做些什么呢?
更新
我刚刚发现了一些东西。对于我的所有网格,我使用 viewModel 上的属性来指定showing 11-20 of 238 items
。基本上,我这样做:
gridPageSize
在网格配置中,我有:
var ViewModel = function () {
var self = this;
self.gridPageSize = 10;
//etc
self.attached = function () {
//etc
self.gridPageSize = $("#GridPageSize").val(); //this is a hidden field I am using to get the page size which was set in admin area
//etc
}
//etc
这对使用服务器端分页的所有网格完全正常。但是,此网格正在使用客户端分页。我现在所做的只是以下几点:
pageSize: self.gridPageSize,
serverPaging: false,
serverFiltering: false,
serverSorting: false,
//etc
现在它按预期工作。这是一个很好的解决方法,但并不完美,因为我无法动态设置页面大小。关于这里发生了什么的任何想法?
答案 0 :(得分:0)
您可以动态更改网格的pageSize
。您需要做的只是调用网格pageSize()
的{{1}}方法,它应该按预期工作。
dataSource
答案 1 :(得分:0)
这不再是一个问题,因为 OData 5.7 现在为返回复杂类型集合的操作/函数返回@odata.count
。以前,我关闭服务器端分页和过滤..刚刚获得客户端上的所有数据,我不喜欢,但别无选择......但现在我可以使用服务器端分页而不需要关心关于这个奇怪的问题了。有关 OData 的更多信息,请点击此处:https://github.com/OData/WebApi/issues/484#issuecomment-153929767