C# Web分頁功能實現


無論是網站還是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分頁功能實現 | 小曾博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM