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
購買完整MVC課程(一百小時),限時六折優惠並免費加贈兩萬元「.NET Core升級課程」,請直接來信洽詢
(太便宜!太划算,不能公開) mis2000lab (at) yahoo.com.tw ; school (at) mis2000lab.net
學員感言:
購買完整MVC課程(一百小時),限時六折優惠並免費加贈兩萬元「.NET Core升級課程」,請直接來信洽詢
(太便宜!太划算,不能公開) mis2000lab (at) yahoo.com.tw ; school (at) mis2000lab.net
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。
......... facebook社團 https://www.facebook.com/mis2000lab ......................
......... YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................
ASP.NET MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽
[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。