自己寫 ASP.NET MVC分頁(.Skip() 與.Take() )

ASP.NET MVC分頁的寫法(.Skip() 與.Take() ),其實跟SQL 2012起可用的 OFFSET-FETCH很類似。

自己動手寫,並不難。

 

 

 

 


 

 

 

之前的文章,提到網頁程式分頁的寫法。

使用SQL 2012起可用的 OFFSET-FETCH,搭配ADO.NET (DataReader)來做分頁(Paging)。

 

相關文章(課前導讀) --

[讀書心得]資料分頁的最佳化,以SQL 2012的OFFSET-FETCH為例

http://mis2000lab.pixnet.net/blog/post/33836306

 

 

[習題]上集 Ch 14-4 撰寫ADO.NET DataReader的分頁程式#3(搭配SQL 2012指令 OFFSET...FETCH)

http://mis2000lab.pixnet.net/blog/post/35057446 

或是  

https://mis2000lab.blogspot.tw/2018/04/ch-14-4-adonet-datareader3sql-2012.html

 

 

這個範例改成 ASP.NET MVC 的 LINQ語法來做,其實大同小異。

 


 

 

 

 

原本的SQL指令:

//== ADO.NET 參數的寫法 ==
String SqlStr = "Select test_time, id, title, summary from test Order By id

OFFSET @Page1 ROWS FETCH NEXT @Page2 ROWS ONLY";

        SqlCommand cmd1 = new SqlCommand(SqlStr, Conn);

        cmd1.Parameters.AddWithValue("@Page1", NowPageCount);
        cmd1.Parameters.AddWithValue("@Page2", PageSize);

 

如果我的說法沒錯的話,這是我「個人」整理出來的重點:

   OFFSET X ROWS   代表你忽略了前面幾筆記錄(也就是從這裡  開始讀取,從頭開始算起,第一"頁"的編號請用「零」代表 )

   FETCH NEXT Y ROWS ONLY  代表你從「第幾列」向後 讀取  (我 只要 這幾列的記錄即可! 或是說,每一頁要呈現幾筆記錄? )。

 

Offset.....與後面的 FETCH,其實跟下面的 .Skip() 與 .Take() 功能類同。

(from m in _db.UserTables

                orderby m.UserId   

                select m).Skip(NowPageCount).Take(PageSize);

 

 

======= 程式碼如下 ======================(start)

        public ActionResult IndexPage(int id=1)

        {   // id變數,目前位於第幾頁?

            // PageSize變數,每一頁,要展示幾筆記錄?         

            int PageSize = 3;

 

            // NowPageCount,目前正在觀賞這一頁的紀錄

            int NowPageCount = 0;

            if (id == 0)   {

                NowPageCount = (id - 1) * PageSize;    // PageSize,每頁展示3筆紀錄(上面設定過了)

            }

 

            // 這段指令的 .Skip()與 . Take(),其實跟T-SQL指令的 offset...fetch....很類似(SQL 2012起可用)

            var ListAll = (from m in _db.UserTables

                           orderby m.UserId   // 若寫 descending ,則是反排序(由大到小)

                           select m).Skip(NowPageCount).Take(PageSize);    // .Skip() 從哪裡開始(忽略前面幾筆記錄)。 .Take()呈現幾筆記錄

 

            if (ListAll == null)

            {   // 找不到任何記錄

                return HttpNotFound();

            }

            else   {

                return View(ListAll.ToList());

            }

        }

======= 程式碼如上 ======================(end)

 

執行時,自行輸入「URL網址」與「頁數」即可

例如:http://....../控制器名稱/IndexPage/3

 

 

如下圖。畫面最底下的「分頁列」也可以套用,
跟以前的寫法一樣,幾乎不需更動。

唯一更動的地方就是上面提到的:「ADO.NET + SQL指令」改成「LINQ」

ASP.NET MVC 超入門 -- 23.5小時 影片教學

http://mis2000lab.pixnet.net/blog/post/35294077

 

ASP.NET MVC (自修 / 網路自學)相關資源

https://dotblogs.com.tw/mis2000lab/2016/03/09/aspnet_mvc_tutorial

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net



ASP.NET遠距教學、線上課程(Web Form + MVC)。 第二門 課程「四折」-- 以MVC課程 作優惠。
第一天課程, "完整" 試聽。  如不滿意  全額退費!
................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

*********************************************************************************************

*** ASP.NET MVC線上課程 第一天 免費看 (5.5小時) *** 

************************************************************(歡迎索取,免費申請)*****

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估

    MIS2000 Lab.  線上教學影片(YouTube) **免費觀賞**