前端使用 jquery pagination.js 插件。
环境准备:jquery.js、pagination.js、pagination.css
附件下载:https://files.cnblogs.com/files/motion/pagination.rar
引用的顺序一定是 jquery在 pagination的前面。
然后,操作方法可以写在闭包函数里。
第一步,在自己需要展示分页控件的地方创建个div 容器
<div class="card-body rec-pat p-0"> <div id="page_focus"></div> </div>
然后使用 pagination.js 的方法初始化组件。
$(function () {
var pageIndex = 1; //页面索引初始值
var pageSize = 8; //每页显示条数初始化,修改显示条数,修改这里即可
$("#page_focus").pagination({ dataSource: function (done) { var result = []; $.ajax({ cache: false, type: "post", dataType: "json", url: "/Home/GetTotalFocusPageCount", async: false, error: function () { //showTip("提示", "发生未知错误,课程获取失败", "error", "toast-top-right"); return false; }, success: function (data) { for (var i = 1; i < data; i++) { result.push(i); } done(result); } }); }, pageSize: pageSize, totalNumber: 120, showGoInput: true, showGoButton: true, callback: function (data, pagination) { PageCallback(data, pagination); } })
//翻页调用
function PageCallback(index, jq_page) {
initTable(jq_page.pageNumber, jq_page.pageSize);
}
})
/**init table */ function initTable(pageIndex, pageSize) { $.ajax({ cache: false, type: "post", dataType: "json", url: "/Home/GetInitTable", data: { pageIndex: pageIndex, pageSize: pageSize }, async: false, error: function () { //showTip("提示", "发生未知错误,课程获取失败", "error", "toast-top-right"); return false; }, success: function (data) { if (data != null) { $("#selectDataBody").html(""); $("#selectDataBody").append(template("userdefine_template", data)); } } });
pagination初始化的方法很多,官网上有很详细的教程。这里先介绍我所使用的这种方法。
首先是 dataSource参数,这里通过后台,获取总数据条数。 这个 /Home/GetTotalFocusPageCount 路由请求后返回的结果是总记录数,是个int型变量。后台的方法根据实际需要,见仁见智,没有标准写法。
public int GetTotalFocusPageCount(string userID) { try { int toalCount = 0; string strSql = $"SELECT count(*) from MyFocus where userid='{userID}'"; DataTable dt_Sqlect = sqliteHelper.GetSelectTable(strSql); if (dt_Sqlect.Rows[0][0] != null) { toalCount = Convert.ToInt32(dt_Sqlect.Rows[0][0].ToString()); } return toalCount; } catch (Exception ex) { LogInfoHelper.LogError(ex.Message, userID, "GetUserFocus"); return 0; } }
后台返回总记录条数后,循环给数组result 赋值,然后调用 done(result);这个done 在一开始方法定义就是一个参数
function (done) {};这个是pagination 自带的写法,要注意。这个方法会帮助根据 每页的条数计算出总页数,然后渲染到页面。
到这里页面渲染都可以了。
然后就是点击下一页的事件了,
也就是 callback 回调节点
callback: function (data, pagination) {
initTable(pagination.pageNumber,pagination.pageSize);
}
/**init table */ function initTable(pageIndex, pageSize) { $.ajax({ cache: false, type: "post", dataType: "json", url: "/Home/GetInitTable", data: { pageIndex: pageIndex, pageSize: pageSize }, async: false, error: function () { //showTip("提示", "发生未知错误,课程获取失败", "error", "toast-top-right"); return false; }, success: function (data) { if (data != null) { $("#selectDataBody").html(""); $("#selectDataBody").append(template("userdefine_template", data)); } } });
这里,通过ajax 向后台传参数 pageIndex和pageSize,后台根据参数查询相应页面的数据,返回数据集合,js再渲染到页面,整个分页流程就算完成了。
public string GetInitTable(int pageIndex, int pageSize) { try { pageIndex = pageIndex - 1;
string strSql_data = @$" SELECT * FROM [FinanceData] where 1=1 LIMIT {pageSize} offset {pageIndex * pageSize};"; DataTable dt_Sqlect = sqliteHelper.GetSelectTable(strSql_data); string JsonStringResult = string.Empty; JsonStringResult = JsonConvert.SerializeObject(dt_Sqlect); return JsonStringResult; } catch (Exception ex) { LogInfoHelper.LogError(ex.Message, "GetInitTable)"); return ""; } }