ABP入門系列(7) 分頁實現

2022-01-10 00:16:19 字數 2995 閱讀 6646

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中用過的方法whereifpageby,是的,這是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 ...