abp入門系列目錄——學習abp框架之實操演練
完成了任務清單的增刪改查,咱們來講一講必不可少的的分頁功能。
首先很慶幸abp已經幫我們封裝了分頁實現,實在是貼心啊。
來來來,這一節咱們就來捋一捋如何使用abp的進行分頁吧。
資料傳輸物件(data transfer objects)用於應用層和展現層的資料傳輸。我們在展現層有分頁請求時,一般需要指定兩個引數,乙個用來標誌第幾頁、乙個是每頁行數(一般有配置檔案配置)。展現層傳入資料傳輸物件(dto)呼叫乙個應用服務方法,接著應用服務通過領域物件執行一些特定的業務邏輯並且返回dto給展現層。這樣展現層和領域層被完全分離開了。在具有良好分層的應用程式中,展現層不會直接使用領域物件(倉庫,實體)。
因為分頁是乙個很常用的功能,所以,展現層我們有分頁請求時,最好有相應的dto來封裝這兩個引數。
在abp原始碼中並沒有為我們封裝這樣公用的類,但是在abpzero專案中,定義了相應的分頁dto。
對應的類圖如下:
從中可以看到主要包括以下四個公共dto定義:
pagedinputdto
:分頁請求dto
pagedandsortedinputdto
:分頁排序dto
pagedsortedandfilteredinputdto
:分頁排序過濾dto
pagedandfilteredinputdto
:分頁過濾dto
是不是很實用,我們的分頁一般是和過濾排序混合使用的。
其中主要定義了以下幾個主要屬性:
具體的實現就不詳述了,相信仔細看類圖,就能自己動手實現。abpzero把這些公共dto定義在了應用服務層的dto資料夾下,具體路徑如下圖。
拿我們的任務清單舉例,我們修改下建立的gettaskinputdto
,讓它繼承自pagedsortedandfilteredinputdto
,這樣gettaskinputdto
就擁有了進行分頁排序過濾需要用到的屬性。
public class gettasksinput : pagedsortedandfilteredinputdto
public int? assignedpersonid
}
abp已經為我們定義了泛型的pagedresultdto
用來包裝返回的分頁結果。其中主要包括兩個屬性,int totalcount
儲存總個數,ireadonlylistitems
儲存返回的分頁結果集。
public pagedresultdtogetpagedtasks(gettasksinput input)
分頁的實現很簡單,先進行過濾,排序,再進行分頁,最後使用pagedresultdto
封裝分頁結果。
細心的你也許發現了兩個未曾在linq中用過的方法whereif
和pageby
,是的,這是abp提供的擴充套件方法,感興趣的可以看下原始碼queryableextensions的具體實現,其實實現的很簡單,但我們平時在使用linq時卻未必能想得到。
在這裡提幾個問題:
請問在這段**中共進行了幾次查詢?
**中使用的是什麼分頁技術?(真分頁?假分頁?)
1、請自行在web專案中安裝x.pagedlist.mvcnuget程式包
2、在controller中使用x.pagedlist提供的方法構造分頁結果供前端使用
因為我們在應用服務層已經手動實現了分頁邏輯,所以按照x.pagedlist官網示例,我們需要自行構造staticpagedlist
作為返回結果。
public actionresult pagedlist(int? page)
; //已經在應用服務層手動完成了分頁邏輯,所以需手動構造分頁結果
var onepageoftasks = new staticpagedlist(result.items, pagenumber, pagesize, result.totalcount);
//將分頁結果放入viewbag供view使用
viewbag.onepageoftasks = onepageoftasks;
return view();
}
從**中可以看到我們構造完x.pagedlist提供的分頁結果後放入了viewbag中,供檢視使用。
3、view中新增分頁控制項
pagedlist檢視的**如下:
@using x.pagedlist.mvc;
@using abp.web.mvc.extensions
@using x.pagedlist;
@html.pagedlistpager((ipagedlist)viewbag.onepageoftasks, page => url.action("pagedlist", new ))
其中最後一句**是用來生成分頁控制項。
最終效果如圖:
本節主要講解了如何使用abp進行後台分頁,並順帶講解了abp後台分頁邏輯的實現方式。同時也演示了如何使用x.pagedlist進行前端分頁。
ABP入門系列(7) 分頁實現
abp入門系列目錄 學習abp框架之實操演練 完成了任務清單的增刪改查,咱們來講一講必不可少的的分頁功能。首先很慶幸abp已經幫我們封裝了分頁實現,實在是貼心啊。來來來,這一節咱們就來捋一捋如何使用abp的進行分頁吧。資料傳輸物件 data transfer objects 用於應用層和展現層的資料...
ABP入門系列(7) 分頁實現
abp入門系列目錄 學習abp框架之實操演練 完成了任務清單的增刪改查,咱們來講一講必不可少的的分頁功能。首先很慶幸abp已經幫我們封裝了分頁實現,實在是貼心啊。來來來,這一節咱們就來捋一捋如何使用abp的進行分頁吧。資料傳輸物件 data transfer objects 用於應用層和展現層的資料...
ThinkPHP3 2 分頁實現
o 先看效果圖 一 分頁方法 todo 基礎分頁的相同 封裝,使前台的 更少 param m 模型,引用傳遞 param where 查詢條件 param int pagesize 每頁查詢條數 return think page function getpage m,where,pagesize ...