如何将页码传递给 kendo 数据源,以便它可以加载第 2 页的数据?

How to pass page number to kendo datasource, so it could load data of page 2?

以下代码构建我的 kendo 数据源:

 var dataSource = new kendo.data.DataSource({
                serverPaging: true,
                schema: {
                    data: "ListMediaSummary",
                    total: "RowCount",
                },
                transport: {
                    read: {
                        url: gAppBaseURL + "UniversalSearch/SearchData?searchText=" + searchText + "&pageNumber=" + page,
                        type: "POST",
                        dataType: "json",
                    }
                },
                parameterMap: function (data, type) {
                    if (type == "read") {
                        return {
                            $top: data.take,
                            $skip: data.skip
                        }
                    }
                },
                page: 1,
                pageSize: 25,
            });

然后我从这里将参数 "searchText" 和 "PageNumber" 从 transport.read 方法传递到我的 asp.net 控制器中的 Action 方法,之后搜索结果被渲染到 kendo listView 中。 操作方法获取 "searchText" 值但它没有获取 pageNumber?虽然在 post 中它确实传递了页码(在 firebug 中选中)但我想要的是将页码传递给函数中的 transport.read 方法。我怎样才能做到这一点?

要启用服务器分页,您应该配置数据源以启用serverPaging。然后数据源会将数据项的分页实现交给远程服务。默认情况下,数据源在客户端执行分页。

<script>
var dataSource = new kendo.data.DataSource({
  transport: {
    /* transport configuration */
  },
  serverPaging: true,
  schema: {
    total: "total" // total is returned in the "total" field of the response
  }
});
</script>

如果将 serverPaging 设置为 true,请不要忘记设置 schema.total。

启用服务器分页后,以下选项会发送到服务器:

  • page - 到return的数据项的页码(1表示第一页)
  • pageSize - 项目数 return
  • skip - 要跳过多少数据项
  • 取-数据项的个数return(同 pageSize)

因此,您应该将控制器操作方法更改为如下内容:

public ActionResult GetData(int page, int pageSize, int skip, int take){
    // do some magic operation
}