• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#Web分页功能实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

无论是网站还是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分页功能实现 | 小曾博客


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
支持MVC的代码生成运行效果C#ASP.NET发布时间:2022-07-18
下一篇:
关于打印(c#套打...)发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap