1. 程式人生 > >asp.net 分頁思想+mvc 分頁

asp.net 分頁思想+mvc 分頁

1.先寫持久化類,傳兩個數就行,解除安裝資料訪問層

public List<NewInfo> GetPageList(int start,int end)
{
    string sqlstr="select * from(select row_number() OVER(ORDER BY id) as num,* from in T_News) as t where t.num)[email protected] and t.num<[email protected]";
    SqlParameter[] sqlPara={new SqlParameter("@start",start),new SqlParameter("@end",end)};
    DataTable dt=SqlHelper.GetTable(sqlstr,sqlpara);
    //接下來將取到的資料持久化成物件
    //返回該類的物件就行了,程式碼省略
       //return list
 }
public int RecordCount()
{
    string str="select count(1) from T_News";
    return //呼叫sqlhelper中的方法
}


2.將分頁寫在邏輯業務層

public List<NewInfo> GetPageList(int pageIndex,int PageSize)
{
    int start=(pageIndex-1)*pageSize+1;
    int end=pageIndex*pageSize;
    List<NewInfo> list=NewInfoDal.GetPageList(start,end);
    return list;
}
public int GetPageCount(int pageSize)
{
    int numcount=NewInfoDal.RecordCount();
    return Math.Ceiling((double)numcount/pageSize);
}

3MVC或者業務邏輯

public ActionResult Index()
{
    int pageIndex=Request["pageIndex"] !=null? int.parse(Request["page"]);
    int pageSize=10;
    int pageCount=NewInfoService.GetPageCount(pageSize);
    pageIndex=pageIndex<1 ? 1 :pageIndex;
    pageIndex=pageIndex>pageCount> ? pageCount: pageIndex;
    List<NewInfo> list=NewInoService.getPageList(pageIndex,pageSize);
    //下面是資料渲染到前臺
}

3.下面利用pageindex 和pageCount來做頁碼條

public static string(int pageIndex,int pageCount)
{
    //頁碼顯示10條資料,算出開始顯示的數start,和end
    if(pageCount==1)
    {
        return string.Empty;
    }
    int start=pageIndex-5;//起始位置
    if(start<1)
    {
        start=1
    }
    int end=start+9;
    if(end>pageCount)
    {
        end=pageCount;
    }
    StringBuilder sb=new stringBuilder();
    for(int i=start,i<=end;i++)
    {
        //當前頁沒有超連結
      if(i==pageIndex)
      {
          sb.Append(i);
      }
      else
      {
          sb.Append(string.Format("<a href=?pageIndex={0}'>{0}</a>",i));
      }

    }
    return sb.ToString();
}

4.前臺檢視頁呼叫,或者使用@Html.Raw,用原始方法輸出

@MvcHtmlString.Create(PageBar.GetPageBar(ViewData["pageIndex"],(int)ViewData["PageCount"]))

5在jquery esayui加上樣式就搞定,輸出記錄時,把該條資料從當前的表格中移出

6.請參考另外一個MVC分頁方法

http://www.cnblogs.com/xiaofengfeng/p/3705632.html

下面這段引用了已經分好頁的方法

public static string ShowPageNavigate(int currentPage, int pageSize, int totalCount)
        {
            var redirectTo = HttpContext.Current.Request.Url.AbsolutePath;
            pageSize = pageSize <= 0 ? 3 : pageSize;
            var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //總頁數
            var output = new StringBuilder();
            if (totalPages > 1)
            {
                //if (currentPage != 1)
                {//處理首頁連線
                    output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=1&pageSize={1}'>首頁</a> ", redirectTo, pageSize);
                }
                if (currentPage > 1)
                {//處理上一頁的連線
                    output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>上一頁</a> ", redirectTo, currentPage - 1, pageSize);
                }
                else
                {
                    // output.Append("<span class='pageLink'>上一頁</span>");
                }
 
                output.Append(" ");
                int currint = 5;
                for (int i = 0; i <= 10; i++)
                {//一共最多顯示10個頁碼,前面5個,後面5個
                    if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
                    {
                        if (currint == i)
                        {//當前頁處理
                            //output.Append(string.Format("[{0}]", currentPage));
                            output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage, pageSize, currentPage);
                        }
                        else
                        {//一般頁處理
                            output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage + i - currint, pageSize, currentPage + i - currint);
                        }
                    }
                    output.Append(" ");
                }
                if (currentPage < totalPages)
                {//處理下一頁的連結
                    output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>下一頁</a> ", redirectTo, currentPage + 1, pageSize);
                }
                else
                {
                    //output.Append("<span class='pageLink'>下一頁</span>");
                }
                output.Append(" ");
                if (currentPage != totalPages)
                {
                    output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>末頁</a> ", redirectTo, totalPages, pageSize);
                }
                output.Append(" ");
            }
            output.AppendFormat("第{0}頁 / 共{1}頁", currentPage, totalPages);//這個統計加不加都行
 
            return output.ToString();
        }
    }
分頁css樣式
body {
}
 
.paginator {
    font: 12px Arial, Helvetica, sans-serif;
    padding: 10px 20px 10px 0;
    margin: 0px;
}
 
    .paginator a {
        border: solid 1px #ccc;
        color: #0063dc;
        cursor: pointer;
        text-decoration: none;
    }
 
        .paginator a:visited {
            padding: 1px 6px;
            border: solid 1px #ddd;
            background: #fff;
            text-decoration: none;
        }
 
    .paginator .cpb {
        border: 1px solid #F50;
        font-weight: 700;
        color: #F50;
        background-color: #ffeee5;
    }
 
    .paginator a:hover {
        border: solid 1px #F50;
        color: #f60;
        text-decoration: none;
    }
 
    .paginator a, .paginator a:visited, .paginator .cpb, .paginator a:hover {
        float: left;
        height: 16px;
        line-height: 16px;
        min-width: 10px;
        _width: 10px;
        margin-right: 5px;
        text-align: center;
        white-space: nowrap;
        font-size: 12px;
        font-family: Arial,SimSun;
        padding: 0 3px;
    }
分頁後臺,這裡是先把所有資料取出來,傳到客戶端然後再進行分頁,這樣會降低效能,不過可以參考,一般分頁都寫在服務端
public ActionResult loadjson()
        {
            int pageSize = Request["pageSize"] == null ? 10 : int.Parse(Request["pageSize"]);
            int pageIndex = Request["pageIndex"] == null ? 1 : int.Parse(Request["pageIndex"]);
            int totalCount = shop.tbl_admin.Count();
 
            //給前臺userinfo所有的資料,並且是json格式
            var allorder = shop.tbl_admin.OrderBy(u=>u.id)
                .Skip(pageSize*(pageIndex-1))
                .Take(pageSize)
                .ToList();
            //接受一個對像,內部把此物件使用javaScript序列化類物件志字串,傳送到前臺
 
            var data = from u in allorder select new { u.id,u.realname,u.sex};
 
            string strNav = PageNavHelper.ShowPageNavigate(pageIndex,pageSize,totalCount);
 
            var result = new {Data=data, NavStr=strNav };
            return Json(result, JsonRequestBehavior.AllowGet);
        }
ajax非同步載入
<script type="text/javascript">
        $(function () {
            //頁面載入完成後從後如載入當前頁資料
            initTable();
        });
 
        //初始化表格資料
        function initTable(queryData)
        {
            $.getJSON("/AjaxUser/loadjson",queryData, function (data) {
                var tb = $("#tbList");
                //先移除舊的,新增新的
                $("#tbList tr[type=data]").remove();
                for (var i = 0; i < data.Data.length; i++)
                {
                    var strTr = "<tr type='data'>";
                    strTr += "<td>" + data.Data[i].id + "</td>";
                    strTr += "<td>" + data.Data[i].realname + "</td>";
                    strTr += "<td>" + data.Data[i].sex + "</td>";
                    strTr += "<td><a UId='" + data.Data[i].id + "' href='javascript:void(0)'>修改</a>" +
                        "<a UId='" + data.Data[i].ID + "' href='javascript:void(0)'>刪除</a></td>";
                    strTr += "</tr>";
                    tb.append(strTr);
                }
                $("#Nav").html(data.NavStr);
 
                //繫結分頁標籤的點選事件
                $(".pageLink").click(function () {
                    //把頁碼彈出來
                    var strHref = $(this).attr("href");
                    var queryStr = strHref.substr(strHref.indexOf('?') + 1);
                    //alert(queryStr);
                    initTable(queryStr);
                    return false;
                });
            });
        }
    </script>
</head>
<body>
    <div>
        <table id="tbList">
            <tr>
                <td>id</td>
                <td>姓名</td>
                <td>性別</td>
                <td>操作</td>
            </tr>
        </table>
 
        <div id="Nav" class="paginator">
 
        </div>
         
    </div>
</body>
</html>


相關推薦

asp.net 思想+mvc

1.先寫持久化類,傳兩個數就行,解除安裝資料訪問層 public List<NewInfo> GetPageList(int start,int end) {     string sqlstr="select * from(select row_number(

[Asp.Net Core] - 使用 ViewComponents 實現控件

world asi action span ring easyn eba orm clas 分頁控件(定義分頁參數) ~/ViewComponents/PaginationViewComponent.cs using HelloWorld.DataContext; u

Asp.Net中的三種方式總結

rom chang clas 綁定 select proc dll xtend tinc 本人ASP.net初學,網上找了一些分頁的資料,看到這篇文章,沒看到作者在名字,我轉了你的文章,只為我可以用的時候方便查看,2010的文章了,不知道這技術是否過期。 以下才是正文

ASP.NET 簡單實現List資料物件工具類

對於一個List分頁,這個就很簡單了只需要組裝資料結構,然後根據分頁引數改變資料顯示就OK了。 Pager工具 using System; using System.Collections.Generic; using System.Linq; using System.Threadin

ASP.NET 簡單實現List資料物件工具類

對於一個List分頁,這個就很簡單了只需要組裝資料結構,然後根據分頁引數改變資料顯示就OK了。 Pager工具 using System; using System.Collections.Generic; using System.Linq; using System.

asp.net Mvc4 使用ajax結合外掛實現無重新整理

本文為在mvc4中使用ajax實現無重新整理分頁demo,記錄一下。 解決方案思想:頁面資料的初始載入和按頁載入都是通過ajax來進行,頁面分頁連結點選後利用ajax技術傳送當前頁碼到後端控制器,後端控制器根據當前頁碼和設定的pageSize從資料庫中取出對應頁的資料。

ASP.NET中用gridView來實現

如果資料過多是,頁面底下會有一個頁碼。GridView就對這個做了很好的封裝。  1先把屬性AllowPaging設定為true,pagesize為每一頁的行數,我在此例中設為3。  2新增四個boundfield,設定datafield(繫結的資料庫中的欄位)和header

asp.net core 系列】5 佈局和靜態資源

# 0. 前言 在之前的4篇的內容裡,我們較為詳細的介紹了路由以及控制器還有檢視之間的關係。也就是說,系統如何從使用者的HTTP請求解析到控制器裡,然後在控制器裡處理資料,並返回給檢視,在檢視中顯示出來。這一篇我將為大家介紹基礎的最後一部分,佈局頁和靜態資源引入。 # 1. 佈局頁 在控制器和檢視那一篇

ASP.Net Core 5.0 MVC中AOP思想的體現(五種過濾器)並結合專案案例說明過濾器的用法

執行順序    使用方法,首先實現各自的介面,override裡面的方法, 然後在startup 類的 ConfigureServices 方法,註冊它們。 services.AddTransient(typeof(MyAction));

ASP.NET Core 2.0 MVC項目實戰

表現層 傳統 long 多層 height rim 基礎架構 blank 控制器 一、前言 畢業後入職現在的公司快有一個月了,公司主要的產品用的是C/S架構,再加上自己現在還在學習維護很老的delphi項目,還是有很多不情願的。之前實習時主要是做.NET的

ASP.Net Core 2.2 MVC入門到基本使用系列 (二)

ron post 通過 list nvi 技術分享 ngs onf 授權 本教程會對基本的.Net Core 進行一個大概的且不會太深入的講解, 在您看完本系列之後, 能基本甚至熟練的使用.Net Core進行Web開發, 感受到.Net Core的魅力. 本教程知識點大體

ASP.Net Core 2.2 MVC入門到基本使用系列 (三)

conf 正常 所有 代碼 core () 文件 發生 行修改 本教程會對基本的.Net Core 進行一個大概的且不會太深入的講解, 在您看完本系列之後, 能基本甚至熟練的使用.Net Core進行Web開發, 感受到.Net Core的魅力. 本教程知識點大體分為以下幾

ASP.Net Core 2.2 MVC入門到基本使用系列 (四)

函數 自定義 錯誤 str develop 我們 arp razor 三方 本教程會對基本的.Net Core 進行一個大概的且不會太深入的講解, 在您看完本系列之後, 能基本甚至熟練的使用.Net Core進行Web開發, 感受到.Net Core的魅力. 本教程知識點大

ASP.NET Core 2.0 MVC

 一、前言   上篇實戰完成後,沒想到會有那麼多的圈友給了那麼多的支援,甚至連只是作為程式碼倉儲的git上也給了一些小星星,真的感覺很惶恐啊,哈哈哈,畢竟程式碼寫的很爛啊。由於上一篇只是大概說了下專案,所以準備寫下這篇詳細說下自己對於獲取當前登入使用者的設計與實現,原本準備

asp.net core 系列 5 MVC框架路由(上)

傳遞 交互 light 單個 sof () sta 合並 如何 一. 概述   介紹asp.net core路由時,我初步想了下,分幾篇來說明。 路由的知識點很多,參考了官方文檔提取出一些重要的知識點來說。 在ASP.NET Core中是使用路由中間件來匹配傳入請

asp.net core 系列 6 MVC框架路由(下)

路由 uil doc onf 示例 image privacy cti 自動 一.URL 生成 接著上篇講MVC的路由,MVC 應用程序可以使用路由的 URL 生成功能,生成指向操作的 URL 鏈接。 生成 URL 可消除硬編碼 URL,使代碼更穩定、更易維護。 此部分重

(8)ASP.NET Core 中的MVC路由(一)

1.前言 ASP.NET Core MVC使用路由中介軟體來匹配傳入請求的URL並將它們對映到操作(Action方法)。路由在啟動程式碼(Startup.Configure方法)或屬性(Controller Action屬性)中定義。路由描述應如何將URL路徑與操作(Action方法)相匹配。它還用於在響應

(9)ASP.NET Core 中的MVC路由(二)

 1.URL生成 MVC應用程式可以使用路由的URL生成功能,生成指向操作(Action)的URL連結。 IUrlHelper 介面用於生成URL,是MVC與路由之間的基礎部分。在控制器、檢視和檢視元件中,可通過Url屬性找到IUrlHelper的例項。在此示例中,將通過Controller.Ur

ASP.Net Core 2.2 MVC入門到基本使用系列 (五)

本教程會對基本的.Net Core 進行一個大概的且不會太深入的講解, 在您看完本系列之後, 能基本甚至熟練的使用.Net Core進行Web開發, 感受到.Net Core的魅力. 本教程知識點大體分為以下幾個階段 ASP.Net Core MVC基礎知識 Startup基本配置和理解

如何使用Serilog.AspNetCore記錄ASP.NET Core3.0的MVC屬性

這是Serilog系列的第三篇文章。 第1部分-使用Serilog RequestLogging減少日誌詳細程度 第2部分-使用Serilog記錄所選的終結點屬性 第3部分-使用Serilog.AspNetCore記錄MVC屬性(本文) 第4部分-從Serilog請求記錄中排除執行狀況檢查端點 作者:依