asp.net mvc4 mysql制作簡(jiǎn)單分頁(yè)組件(部分視圖)
在開始做mysql分頁(yè)功能組件前,便設(shè)定的是要有一定可復(fù)用性。先在項(xiàng)目里Views文件夾下右鍵新建名為_PaginationComponent.cshtml,這里html及css我采用的bootstrap分頁(yè)組件,這可以參考http://v3.bootcss.com/components/。
先將生成項(xiàng)目效果截圖呈上:

這里有需要預(yù)先知道的,是mysql分頁(yè)查詢與mssql分頁(yè)查詢實(shí)現(xiàn)不同點(diǎn)在于,mysql支持limit語(yǔ)句,limit格式為 limit pageIndex*pageSize,pageSize,pageIndex--為頁(yè)數(shù),pageSize--為頁(yè)面包含數(shù)據(jù)量。limit具體用法可查詢mysql手冊(cè)。然后需要預(yù)先定義好pageSize,pageIndex,pageCount(分頁(yè)總數(shù))三個(gè)量。這里預(yù)設(shè)pageSize為30,即: int pageSize = 30。
首先來(lái)實(shí)現(xiàn)獲取pageCount:思路是,先將要獲取的所有數(shù)據(jù)集從數(shù)據(jù)庫(kù)中取出,根據(jù)pageSize = 30得出總頁(yè)數(shù),這里會(huì)遇到數(shù)據(jù)集數(shù)量為30的倍數(shù)與否問(wèn)題,解決是:
MySqlCommand comm_1 = new MySqlCommand(sqlSearch, connection);
MySqlDataAdapter da_1 = new MySqlDataAdapter(sqlSearch, connection);
da_1.SelectCommand = comm_1; //初始化da.fill的命令
DataSet set_1 = new DataSet();
da_1.Fill(set_1);
DataTable dt_1 = set_1.Tables[0]; //使用datatable裝所得多張表數(shù)據(jù),并獲取里面的第一張表
Count = (double)(dt_1.Rows.Count) / 30;//分頁(yè)總頁(yè)數(shù)
if (Count > (int)(dt_1.Rows.Count) / 30)
{
pageCount = (dt_1.Rows.Count) / 30 + 1;
}
else if (Count == (dt_1.Rows.Count) / 30)
{
pageCount = (dt_1.Rows.Count) / 30;
}
else if (Count < (int)(dt_1.Rows.Count) / 30)
{
pageCount = 1;
}
這里用到判斷,大于30的pageCount均往上加1,小于30的pageCount為1。
接下來(lái)要實(shí)現(xiàn)的是用pageIndex傳頁(yè)數(shù)獲取對(duì)應(yīng)的數(shù)據(jù)集,思路是利用limit語(yǔ)句特性:
public List<Model> GetDormitoryBottleRecycleListPagination(int pageIndex, int pageSize)
{
Get_Connection();
List<Model> list = null;string sqlPaginatioSearch = "SELECT * FROM table ORDER BY file_1 ASC LIMIT " + (pageIndex - 1) * 30 + "," + pageSize + ""; //填充分頁(yè)后的數(shù)據(jù)
MySqlCommand comm_2 = new MySqlCommand(sqlPaginatioSearch, connection);
MySqlDataAdapter da_2 = new MySqlDataAdapter(sqlPaginatioSearch, connection);
da_2.SelectCommand = comm_2; //初始化da.fill的命令
DataSet set_2 = new DataSet();
da_2.Fill(set_2);
DataTable dt_2 = set_2.Tables[0]; //使用datatable裝所得多張表數(shù)據(jù),并獲取里面的第一張表
if (dt_2 != null && dt_2.Rows.Count > 0)
{
list = new List<Model>();
foreach (DataRow row in dt_2.Rows)
{
Model entity = sqlhelper.CreateItem(row);
list.Add(entity);
}
}
Close_Connection();
return list;
}
string sqlPaginatioSearch = "SELECT * FROM table ORDER BY file_1 ASC LIMIT " + (pageIndex - 1) * 30 + "," + pageSize + ""; //填充分頁(yè)后的數(shù)據(jù)
這是核心sql語(yǔ)句,通過(guò)pageIndex傳入頁(yè)面數(shù),從(pageIndex - 1) * 30處開始取pageSize量的數(shù)據(jù)。
在控制器的action中實(shí)現(xiàn)也是關(guān)鍵:
public ActionResult DormitoryBottleRecycleSort(int id = 1)
{
int pageIndex = id;//傳遞分頁(yè)數(shù)
int pageSize = 30;
int pageCount = 0;
List<BottleRecycleModel> list_1;
list_1 = pbsAccess.GetDormitoryBottleRecycleListPagination(pageIndex, pageSize, pageCount);//獲取分頁(yè)列表
ViewBag.ListCount = list_1.Count;
BottleRecycleList viewBottleRecycleList = new BottleRecycleList();
viewBottleRecycleList.bottleRecycleList = new List<BottleRecycleModel>();//要實(shí)例化對(duì)象,相當(dāng)重要
//這里是為顯示分頁(yè)數(shù)據(jù)的功能代碼
if (list_1 != null)
{
foreach (var item in list_1)
{
BottleRecycleModel viewBottleRecycle = new BottleRecycleModel();
viewBottleRecycle.Id = item.Id;
viewBottleRecycle.DormitoryNumber = item.DormitoryNumber;
viewBottleRecycle.SmallBottleNumber = item.SmallBottleNumber;
viewBottleRecycle.BigBottleNumber = item.BigBottleNumber;
viewBottleRecycle.TotalBottleNumber = item.TotalBottleNumber;
viewBottleRecycle.PublishTime = item.PublishTime;
viewBottleRecycleList.bottleRecycleList.Add(viewBottleRecycle);
}
ViewBag.DormitoryBottleRecycleSort = viewBottleRecycleList.bottleRecycleList;
}
else
{
ViewBag.DormitoryBottleRecycleSort = null;
}
ViewBag.pageCount = pbsAccess.getDormitoryBottlePaginationPageCount();
ViewBag.pageIndex = pageIndex;
return View(ViewBag);
}
這里使用ViewBag進(jìn)行傳值,這里的getDormitoryBottlePaginationPageCount()就是上面pageCount得出的方法。這是后臺(tái)的方法。
現(xiàn)在說(shuō)一下_PaginationComponent.cshtml里該如何運(yùn)用這些值。
@{
string Controllers = ViewContext.RouteData.Values["controller"].ToString();
string Actions = ViewContext.RouteData.Values["Action"].ToString();
}
<li><a href="#">«</a></li>
@for (int i = 1; i < @ViewBag.pageCount + 1; i++)
{
<li><a href="/@Controllers/@Actions/@i">@i</a></li>
}
<li><a href="#">»</a></li>
為了進(jìn)行組件復(fù)用,采用ViewContext.RouteData.Values["controller"].ToString()方法,這樣,在其他頁(yè)面里引用組件時(shí),可以輕易移植過(guò)去如:<a href="/@Controllers/@Actions/@i">@i</a>,當(dāng)然,實(shí)用for循環(huán)是為了顯示出更多的頁(yè)數(shù),諸如1、2、3、4等等,這里我的數(shù)據(jù)比較少,因此只顯示一頁(yè),當(dāng)然還有其他功能諸如省略過(guò)多頁(yè)數(shù)為省略號(hào)和當(dāng)前頁(yè)禁用等等,需要js其他代碼來(lái)實(shí)現(xiàn),這里只為了實(shí)現(xiàn)一個(gè)簡(jiǎn)單的分頁(yè)組件功能。
這個(gè)頁(yè)面里的代碼并非全部分頁(yè)的源碼,這里只提供我個(gè)人解決時(shí)思路,如果有錯(cuò)誤,還請(qǐng)指正,必定虛心求教。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- MySQL基準(zhǔn)測(cè)試套件Benchmark安裝DBI組件過(guò)程分享
- Bootstrap富文本組件wysiwyg數(shù)據(jù)保存到mysql的方法
- Python MySQL數(shù)據(jù)庫(kù)連接池組件pymysqlpool詳解
- Docker安裝常用組件(mysql,redis)的方法
- mysql innodb的重要組件匯總
- MYSQL優(yōu)化之?dāng)?shù)據(jù)表碎片整理詳解
- MySQL通過(guò)show status查看、explain分析優(yōu)化數(shù)據(jù)庫(kù)性能
- Mysql查詢優(yōu)化的一些實(shí)用方法總結(jié)
- mysql配置連接參數(shù)設(shè)置及性能優(yōu)化
- MySQL常用命令與內(nèi)部組件及SQL優(yōu)化詳情
相關(guān)文章
Asp.net core利用MediatR進(jìn)程內(nèi)發(fā)布/訂閱詳解
這篇文章主要給大家介紹了關(guān)于Asp.net core利用MediatR進(jìn)程內(nèi)發(fā)布/訂閱的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Asp.net core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
ASP.NET中利用WebClient上傳圖片到遠(yuǎn)程服務(wù)的方法
這篇文章主要介紹了ASP.NET中利用WebClient上傳圖片到遠(yuǎn)程服務(wù)的方法,包括客戶端和服務(wù)端,代碼附有注釋,需要的的朋友參考下吧2017-01-01
Asp.net core中RedisMQ的簡(jiǎn)單應(yīng)用實(shí)現(xiàn)
這篇文章主要介紹了Asp.net core中RedisMQ的簡(jiǎn)單應(yīng)用實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
一個(gè)Asp.Net的顯示分頁(yè)方法 附加實(shí)體轉(zhuǎn)換和存儲(chǔ)過(guò)程 帶源碼下載
現(xiàn)在自己寫的webform都不用服務(wù)器控件了,所以自己仿照aspnetpager寫了一個(gè)精簡(jiǎn)實(shí)用的返回分頁(yè)顯示的html方法,其他話不說(shuō)了,直接上代碼2012-10-10
Asp.net mvc實(shí)時(shí)生成縮率圖到硬盤
這篇文章主要介紹了Asp.net mvc實(shí)時(shí)生成縮率圖到硬盤的相關(guān)資料,需要的朋友可以參考下2016-05-05
在ASP.net中保存/取出圖片入/從SQL數(shù)據(jù)庫(kù)
在ASP.net中保存/取出圖片入/從SQL數(shù)據(jù)庫(kù)...2006-09-09
使用.net?core?自帶DI框架實(shí)現(xiàn)延遲加載功能
在某些情況,我們希望能延遲一個(gè)依賴的初始化。如果使用的是autofac,我們可以通過(guò)注入Lazy來(lái)實(shí)現(xiàn),這篇文章主要介紹了使用.net?core?自帶DI框架實(shí)現(xiàn)延遲加載,需要的朋友可以參考下2023-02-02

