程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> asp.net mvc4+mysql做一個簡單分頁組件(部分視圖),mvc4mysql

asp.net mvc4+mysql做一個簡單分頁組件(部分視圖),mvc4mysql

編輯:關於.NET

asp.net mvc4+mysql做一個簡單分頁組件(部分視圖),mvc4mysql


  在開始做mysql分頁功能組件前,便設定的是要有一定可復用性。先在項目裡Views文件夾下右鍵新建名為_PaginationComponent.cshtml,這裡html及css我采用的bootstrap分頁組件,這可以參考http://v3.bootcss.com/components/。

  先將生成項目效果截圖呈上:

  這裡有需要預先知道的,是mysql分頁查詢與mssql分頁查詢實現不同點在於,mysql支持limit語句,limit格式為 limit pageIndex*pageSize,pageSize,pageIndex--為頁數,pageSize--為頁面包含數據量。limit具體用法可查詢mysql手冊。然後需要預先定義好pageSize,pageIndex,pageCount(分頁總數)三個量。這裡預設pageSize為30,即: int pageSize = 30。

  首先來實現獲取pageCount:思路是,先將要獲取的所有數據集從數據庫中取出,根據pageSize = 30得出總頁數,這裡會遇到數據集數量為30的倍數與否問題,解決是:

 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裝所得多張表數據,並獲取裡面的第一張表      
            Count = (double)(dt_1.Rows.Count) / 30;//分頁總頁數
            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。

接下來要實現的是用pageIndex傳頁數獲取對應的數據集,思路是利用limit語句特性:

 

 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 + "";                       //填充分頁後的數據
            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裝所得多張表數據,並獲取裡面的第一張表                  
            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 + ""; //填充分頁後的數據
這是核心sql語句,通過pageIndex傳入頁面數,從(pageIndex - 1) * 30處開始取pageSize量的數據。

在控制器的action中實現也是關鍵:

public ActionResult DormitoryBottleRecycleSort(int id = 1)
        {
            int pageIndex = id;//傳遞分頁數
            int pageSize = 30;
            int pageCount = 0;           
            List<BottleRecycleModel> list_1;
            list_1 = pbsAccess.GetDormitoryBottleRecycleListPagination(pageIndex, pageSize, pageCount);//獲取分頁列表
            ViewBag.ListCount = list_1.Count;
            BottleRecycleList viewBottleRecycleList = new BottleRecycleList();
            viewBottleRecycleList.bottleRecycleList = new List<BottleRecycleModel>();//要實例化對象,相當重要
        //這裡是為顯示分頁數據的功能代碼 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進行傳值,這裡的getDormitoryBottlePaginationPageCount()就是上面pageCount得出的方法。這是後台的方法。

  現在說一下_PaginationComponent.cshtml裡該如何運用這些值。

@{
    string Controllers = ViewContext.RouteData.Values["controller"].ToString();
    string Actions = ViewContext.RouteData.Values["Action"].ToString();
}
<li><a href="#">&laquo;</a></li>
@for (int i = 1; i < @ViewBag.pageCount + 1; i++)
{
    <li><a href="/@Controllers/@Actions/@i">@i</a></li>
}

<li><a href="#">&raquo;</a></li>

  為了進行組件復用,采用ViewContext.RouteData.Values["controller"].ToString()方法,這樣,在其他頁面裡引用組件時,可以輕易移植過去如:<a href="/@Controllers/@Actions/@i">@i</a>,當然,實用for循環是為了顯示出更多的頁數,諸如1、2、3、4等等,這裡我的數據比較少,因此只顯示一頁,當然還有其他功能諸如省略過多頁數為省略號和當前頁禁用等等,需要js其他代碼來實現,這裡只為了實現一個簡單的分頁組件功能。

  這個頁面裡的代碼並非全部分頁的源碼,這裡只提供我個人解決時思路,如果有錯誤,還請指正,必定虛心求教。

//

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved