当前位置: 移动技术网 > IT编程>开发语言>.net > C# Web分页功能实现

C# Web分页功能实现

2019年11月05日  | 移动技术网IT编程  | 我要评论

张清苏,老公的春天手机铃声,身份证号码带名字

无论是网站还是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,再调用接口读取当前页面的数据再循环添加到数组里面。效果看博客留言或者短视频页面。

 

本文来自:

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网