随着最新版本的 Kendo UI (in Beta right now) 发布,我们可以使用另一种方法来实现服务器端分页,使用 Angular 提供的带有 Kendo Grid 读取功能的 $http.post 方法。
这是一个使用 MVC 5 控制器作为您从数据源获取数据的端点的示例。它通过将page 和pageSize 发送到控制器来模拟服务器分页,如果需要,您还可以发送take 和skip 并根据需要进行处理。
HTML 标记
<div ng-controller="MyCtrl">
<kendo-grid k-options="mainGridOptions"></kendo-grid>
</div>
JavaScript
function MyCtrl($scope, $http) {
$scope.mainGridOptions = {
dataSource: {
schema: {
data: "Data",
total: "Total"
},
transport: {
read: function (e) {//You can get the current page, pageSize etc off `e`.
var requestData = {
page: e.data.page,
pageSize: e.data.pageSize,
type: "hello"
};
console.log(e);
$http({ method: 'POST', url: 'Home/DataSourceResult', data: requestData }).
success(function (data, status, headers, config) {
e.success(data);
//console.log(data.Data);
}).
error(function (data, status, headers, config) {
alert('something went wrong');
console.log(status);
});
}
},
pageSize: 1,
serverPaging: true,
serverSorting: true
},
selectable: "row",
pageable: true,
sortable: true,
groupable: true
}
}
您可以从 read: function(e){} 声明中的参数 e 获取当前 pageSize、page、take、skip 和更多内容。
因为 post 值引用了 read 函数中的参数,所以每次在网格上更新页面时,它们都会更新。每次网格进行更改时,您都可以使用它来更新您的帖子值。然后网格会重新绑定自己。
Home/DataSourceResult 控制器
[HttpPost]
public ActionResult DataSourceResult(int page, string type, int pageSize)
{
ResponseData resultData = new ResponseData();
string tempData = "";
if (page == 1)
{
tempData = "[{\"NAME\": \"Example Name 1\", \"DESCRIPTION\": \"Example Description 1\"},{\"NAME\": \"Example Name 2\",\"DESCRIPTION\": null}]";
}
else if (page == 2)
{
tempData = "[{\"NAME\": \"Example Name 3\", \"DESCRIPTION\": \"Example Description 3\"},{\"NAME\": \"Example Name 4\",\"DESCRIPTION\": \"Example Description 4\"}]";
}
resultData.Data = tempData;
resultData.Total = "4";
string json = JsonConvert.SerializeObject(resultData);
json = json.Replace(@"\", "");
json = json.Replace("\"[{", "[{");
json = json.Replace("}]\"", "}]");
return Content(json, "application/json");
}
非常基本,但正是我所需要的,也可能对您有所帮助。这使用了原生 Angular http.get 功能,同时仍然允许 Kendo Grid 完成大部分繁重的工作。