C# Web分页功能实现
程序员文章站
2022-10-27 23:30:55
无论是网站还是APP分页功能都是必不可少的。为什么使用分页呢? 1,加载速度快,不会占用服务器太多资源,减少服务器压力。 2,减少数据库压力。 3,提升用户体验。 那么我们常用的分页方法有两种。 1,真分页:每页都会从数据库读取少量数据,优点就是读取数据量少,性能非常好,大型网站往往采用这种方式。 ......
无论是网站还是app分页功能都是必不可少的。为什么使用分页呢?
1,加载速度快,不会占用服务器太多资源,减少服务器压力。
2,减少数据库压力。
3,提升用户体验。
那么我们常用的分页方法有两种。
1,真分页:每页都会从数据库读取少量数据,优点就是读取数据量少,性能非常好,大型网站往往采用这种方式。
2,假分页:从数据库一次性读取大量数据,但由于数据量比较大,导致响应时间长,但是之后的每一页都是快速显示,避免多次访问数据库。
我们常用的就是数据库分页(真分页)。下面看是如何实现的。
先定义存储过程
create proc datauser @page int, @intpagenum int, @total int output as declare @startindex int, @endindex int; set @startindex=(@page-1)*@intpagenum+1; set @endindex=@page*@intpagenum; begin select @total=count(1) from blogs_user select openid,username,href_img,convert(varchar(20),addtime,20) as addtime from (select *,row_number() over(order by addtime desc) as tableid from blogs_user) tableuser where tableid>=@startindex and tableid<=@endindex end
现在我们封装执行存储过程的方法
/// <summary> /// 执行存储过程,返回datatable和总记录条数 /// </summary> /// <param name="page">页码</param> /// <param name="intpagenum">每页数量</param> /// <returns></returns> public static jsondatatable getuserdatadao(int page, int intpagenum) { try { dataset ds = new dataset(); jsondatatable result = new jsondatatable(); using (sqlconnection conn = new sqlconnection(getconnection())) { using (sqlcommand cmd = conn.createcommand()) { cmd.commandtext = "datauser";//存储过程名称 cmd.commandtype = commandtype.storedprocedure; cmd.parameters.add(new sqlparameter("@page", sqldbtype.int));//入参 cmd.parameters.add(new sqlparameter("@intpagenum", sqldbtype.int));//入参 cmd.parameters["@page"].value = page; cmd.parameters["@intpagenum"].value = intpagenum; sqlparameter parameter = cmd.parameters.add("@total", sqldbtype.int); parameter.direction = parameterdirection.output; if (conn.state == connectionstate.closed) { conn.open(); } sqldataadapter my = new sqldataadapter(cmd); my.fill(ds); result.dt = ds.tables[0]; result.total = convert.toint32(cmd.parameters["@total"].value); conn.close(); return result; } } } catch (exception e) { errorlog.write("后台获取用户列表异常", e); return null; } }
封装读取数据接口
[httppost] public jsonresult getuserlist(int page, int intpagenum) { jsondatatable result = blogs_userdao.getuserdatadao(page, intpagenum); if (result != null && result.dt != null && result.dt.rows.count > 0) { result.jsondata = jsonhelper.jsondatatable(result.dt); result.dt = null; return basejsonresult.getinstance().createjsongetresult(true, "成功!", result); } return basejsonresult.getinstance().createjsongetresult(false, "失败,没有数据!", null); }
后台分页就已经完成了。
前端js调用,有分页的ui组件,也可以自己做成“加载更多”分页方式,使用ajax调用接口异步加载数据。
//加载更多点击事件 dataloading() { this.page++;//当前页码 $.post("/m_blogsapi/getnewshare", { page: this.page, sharetypeid: 0, pagesize: this.pagesize }, function (data) { if (data.result) { var addnewshare = json.parse(data.data.newsharejson); for (var i = 0; i < addnewshare.length; i++) { app.blogs_newshare.push(addnewshare[i]); } } }); }
这里我使用的vue。先默认page=1,点击加载更多时,page+1,再调用接口读取当前页面的数据再循环添加到数组里面。效果看博客留言或者短视频页面。
本文来自:c# web分页功能实现 | 小曾博客
上一篇: 你知道怎么拥有健康的健身食谱吗
下一篇: 如何制作可乐鸡翅?简单美味一学就会!