最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET MVC5 實現(xiàn)分頁查詢的示例代碼

 更新時間:2017年02月21日 10:00:41   作者:雪飛鴻  
本篇文章主要介紹了ASP.NET MVC5 實現(xiàn)分頁查詢的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

對于大量數(shù)據(jù)的查詢和展示使用分頁是一種不錯的選擇,這篇文章簡要介紹下自己實現(xiàn)分頁查詢的思路。

分頁需要三個變量:數(shù)據(jù)總量、每頁顯示的數(shù)據(jù)條數(shù)、當前頁碼。

//數(shù)據(jù)總量
int dataCount;
//每頁顯示的數(shù)據(jù)條數(shù)
int pageDataCount;
int pageNumber;

根據(jù)數(shù)據(jù)總量和每頁顯示的數(shù)據(jù)條數(shù)計算出總頁數(shù),根據(jù)當前頁碼和每頁顯示的數(shù)據(jù)條數(shù)計算出從數(shù)據(jù)庫中讀取數(shù)據(jù)的起始行號和結束行號。

//總頁數(shù)
int pageCount = (int)Math.Ceiling(dataCount/ (pageDataCount* 1.0));
int startLine = (pageNumber - 1) * PageDataCount + 1;
int endLine=startLine + PageDataCount - 1;

對于數(shù)據(jù)庫的查詢操作使用輕量級ORM框架Dapper來實現(xiàn),具體代碼如下:

protected IDbConnection CreateConnection()
{
  IDbConnection dbConnection = new SqlConnection(ConnectionString);
  dbConnection.Open();
  return dbConnection;
}

//獲取數(shù)據(jù)庫中數(shù)據(jù)的總條數(shù)
public virtual int QueryDataCount(string tableName)
{
  using (IDbConnection dbConnection = CreateConnection())
  {
    var queryResult = dbConnection.Query<int>("select count(Id) from " + tableName);
    if (queryResult == null || !queryResult.Any())
    {
      return 0;
    }
    return queryResult.First();
  }
}

public virtual IEnumerable<T> RangeQuery<T>(string tableName, int startline, int endline)
{
  if (string.IsNullOrEmpty(tableName))
  {
    throw new ArgumentNullException("表名不得為空或null");
  }
  if (startline <= 0)
  {
    throw new ArgumentOutOfRangeException("起始行號必須大于0");
  }
  if (endline - startline < 0)
  {
    throw new ArgumentOutOfRangeException("結束行號不得小于起始行號");
  }
  using (IDbConnection dbConnection = CreateConnection())
  {
    var queryResult = dbConnection.Query<T>("select top " + (endline - startline + 1) + " * from " + tableName + " where Id not in (select top " + (startline - 1) + " Id from " + tableName + " order by Id desc) order by Id desc");
    if (queryResult != null && queryResult.Any())
    {
      return queryResult;
    }
  }
  return null;
}

繪制分頁按鈕

在App_Code文件夾中添加PageHelper.cshtml文件封裝繪制按鈕的代碼,這里需要注意一點,使用VS發(fā)布站點時App_Code文件夾中的文件不會被打包,需要手動拷貝App_Code文件夾中的文件到站點中。

@*
  amount:數(shù)據(jù)總數(shù),count:每頁顯示的數(shù)據(jù)條數(shù),redierctUrl點擊按鈕時的跳轉鏈接
  頁面上需引用:bootstrap.min.css
*@
@helper CreatePaginateButton(int amount, int count, string redirectUrl)
{
  <div id="pagenumber" style="position:fixed;bottom:-15px;text-align:center;width:84%">
    <nav style="text-align:center">
      <ul class="pagination">
        <li><a href="@redirectUrl/1" rel="external nofollow" >首頁</a></li>
        @{
          int pageNumber = (int)Math.Ceiling(amount / (count * 1.0));
          pageNumber = pageNumber < 1 ? 1 : pageNumber;
          //頁面上顯示的按鈕數(shù)目(不計首頁、末頁、上一頁、下一頁等按鈕),若頁面總數(shù)超過該值則繪制按鈕分隔符
          const int BUTTON_COUNT = 7;
          // 按鈕分隔符
          const string BUTTON_SEPARATOR = "......";
          //按鈕分隔符左側按鈕數(shù)目(不計首頁、末頁、上一頁、下一頁等按鈕)
          const int LEFT_BUTTON_COUNT = 4;
          //按鈕分隔符右側按鈕數(shù)目(不計首頁、末頁、上一頁、下一頁等按鈕)
          const int RIGHT_BUTTON_COUNT = 2;

          string[] urlSegments = Request.Url.Segments;
          int selectedIndex = 0;
          int.TryParse(urlSegments[urlSegments.Length - 1], out selectedIndex);
          int previous = (selectedIndex - 1) <= 0 ? 1 : selectedIndex - 1;
          int next = (selectedIndex + 1 > pageNumber) ? pageNumber : selectedIndex + 1;
          var r=Request.Cookies[""];
          if (pageNumber > BUTTON_COUNT)
          {
        <li><a id="next" href="@redirectUrl/@previous" rel="external nofollow" >上一頁</a></li>
            for (int i = 1; i <= BUTTON_COUNT; i++)
            {
              if ( selectedIndex >= LEFT_BUTTON_COUNT && selectedIndex%LEFT_BUTTON_COUNT==0 && i <= LEFT_BUTTON_COUNT)
              {
        <li><a name="pageButton" id="@selectedIndex" href="@redirectUrl/@selectedIndex" rel="external nofollow" >@selectedIndex</a></li>
                int step = selectedIndex;
                int tag = 0;
                for (i = 1; i <= LEFT_BUTTON_COUNT; i++)
                {
                  tag = i + step;
                  if (tag > pageNumber - RIGHT_BUTTON_COUNT)
                  {
                    if (i <= LEFT_BUTTON_COUNT)
                    {
                      i = LEFT_BUTTON_COUNT + 1;
                    }
                    break;
                  }
        <li><a name="pageButton" id="@tag" href="@redirectUrl/@tag" rel="external nofollow" rel="external nofollow" >@tag</a></li>
                }
              }
              else if (i <= LEFT_BUTTON_COUNT && selectedIndex<LEFT_BUTTON_COUNT)
              {
        <li><a name="pageButton" id="@i" href="@redirectUrl/@i" rel="external nofollow" rel="external nofollow" >@i</a></li>
              }
              else if (i < LEFT_BUTTON_COUNT && selectedIndex>LEFT_BUTTON_COUNT)
              {
                int step = selectedIndex / LEFT_BUTTON_COUNT;
                int tag = 0;
        <li><a name="pageButton" id="@(step*LEFT_BUTTON_COUNT)" href="@redirectUrl/@(step*LEFT_BUTTON_COUNT)" rel="external nofollow" >@(step*LEFT_BUTTON_COUNT)</a></li>
                for (i = 1; i <= LEFT_BUTTON_COUNT; i++)
                {
                  tag = i + step * LEFT_BUTTON_COUNT;
                  if (tag > pageNumber - RIGHT_BUTTON_COUNT)
                  {
                    if (i <= LEFT_BUTTON_COUNT)
                    {
                      i = LEFT_BUTTON_COUNT + 1;
                    }
                    break;
                  }
        <li><a name="pageButton" id="@tag" href="@redirectUrl/@tag" rel="external nofollow" rel="external nofollow" >@tag</a></li>
                }
              }
              //繪制按鈕分隔符右側按鈕
              if (i==BUTTON_COUNT-1)
              {
        <li><a name="pageButton" id="@(pageNumber-1)" href="@redirectUrl/@(pageNumber-1)" rel="external nofollow" >@(pageNumber-1)</a></li>
              }
              else if(i==BUTTON_COUNT)
              {
        <li><a name="pageButton" id="@pageNumber" href="@redirectUrl/@pageNumber" rel="external nofollow" rel="external nofollow" >@pageNumber</a></li>
              }
              //繪制按鈕分隔符
              else if (i >= BUTTON_COUNT -RIGHT_BUTTON_COUNT)
              {
        <li><span name="pageButton">@BUTTON_SEPARATOR</span></li>
              }
            }
        <li><a id="next" href="@redirectUrl/@next" rel="external nofollow" >下一頁</a></li>
          }
          else
          {
            for (int i = 1; i <= pageNumber; i++)
            {
        <li><a name="pageButton" id="@i" href="@redirectUrl/@i" rel="external nofollow" rel="external nofollow" >@i</a></li>
            }
          }
        }
        <li><a href="@redirectUrl/@pageNumber" rel="external nofollow" rel="external nofollow" >末頁</a></li>
      </ul>
    </nav>
  </div>
  <script>
    $(function () {
      //設置被選中按鈕的背景色
      var selected = $('#@selectedIndex');
      if (selected != undefined) {
        selected.css('background-color', '#E1E1E1');
      }
  </script>
}

在前臺頁面中調(diào)用即可繪制分頁按鈕

@PageHelper.CreatePaginateButton(246, 10, "/usermanager/attentionlist/")

下面是幾張分頁按鈕效果圖:



對應的HTML代碼:


以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • .NET Core系列之MemoryCache 緩存選項

    .NET Core系列之MemoryCache 緩存選項

    這篇文章主要介紹了.NET Core系列之MemoryCache 緩存選項,詳細的介紹一下 MSCache 中的 Options,由此來介紹一些 MSCache 中的內(nèi)部機制,感興趣的小伙伴們可以參考一下
    2018-08-08
  • vb.net 數(shù)組參與SQL語句的查詢范例

    vb.net 數(shù)組參與SQL語句的查詢范例

    做了一個項目,然后遇到這樣的一個問題自己寫了這個方法,覺得很實用就貼上來分享一下吧
    2013-04-04
  • IIS中ASP.NET連接SQL Server出錯的解決方法

    IIS中ASP.NET連接SQL Server出錯的解決方法

    在IIS中運行的ASP.NET應用程序其所屬用戶名為ASPNET的特定用戶,其默認權限是無法訪問SQL Server的,更不可能訪問ASP.NET應用程序的數(shù)據(jù)庫了,因此要在IIS中訪問SQL Server就需要給ASPNET帳戶賦予相應的權限.
    2010-03-03
  • .NET?Core使用?CancellationToken?取消API請求的操作方法

    .NET?Core使用?CancellationToken?取消API請求的操作方法

    用戶取消請求時,你可以使用HttpContext.RequestAborted訪問,您也可以使用依賴注入將其自動注入到您的操作中,這篇文章主要介紹了.NET?Core使用?CancellationToken?取消API請求,需要的朋友可以參考下
    2024-03-03
  • Repeater全選刪除和分頁實現(xiàn)思路及代碼

    Repeater全選刪除和分頁實現(xiàn)思路及代碼

    Repeater控件想必熟悉.net web開發(fā)的人員是很了解不過的了,接下來將與大家共同學習下它的全選刪除和分頁,感興趣的你可不要錯過了哈,希望可以幫助到你
    2013-03-03
  • asp.net DataGrid 中文字符排序的實現(xiàn)代碼

    asp.net DataGrid 中文字符排序的實現(xiàn)代碼

    在論壇上看到有位朋友希望對中文按拼音進行排序,剛好最近有點空,貼一份原來一個同事寫的一個排序類,僅稍微改動了下下,拿出來分享下.
    2009-09-09
  • 總結ASP.NET C#中經(jīng)常用到的13個JS腳本代碼

    總結ASP.NET C#中經(jīng)常用到的13個JS腳本代碼

    本文總結了ASP.NET C#在實際開發(fā)過程中13個JS腳本代碼,方便大家在開發(fā)中使用,希望對大家有用。
    2016-04-04
  • log4net教程日志分類和自動維護示例

    log4net教程日志分類和自動維護示例

    log4net能不能按照功能分類呢?如果通過配置不同的logger,然后功能根據(jù)不同的LoggerName加載Ilog實例,是可以做到。但由于這些功能的log配置差異性極小,也許僅僅就是文件名不同。于是想通過代碼進行配置,下面把方法分享如下
    2014-01-01
  • Asp.net core中實現(xiàn)自動更新的Option的方法示例

    Asp.net core中實現(xiàn)自動更新的Option的方法示例

    這篇文章主要介紹了Asp.net core中實現(xiàn)自動更新的Option的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • ASP.NET MVC3模板頁的使用(2)

    ASP.NET MVC3模板頁的使用(2)

    這篇文章主要為大家詳細介紹了ASP.NET MVC3模板頁的使用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-08-08

最新評論

濉溪县| 定日县| 政和县| 福安市| 辽阳市| 瓦房店市| 连城县| 乌拉特前旗| 建昌县| 千阳县| 哈巴河县| 英吉沙县| 巨鹿县| 夏河县| 都匀市| 双流县| 太谷县| 乐至县| 铅山县| 墨江| 当阳市| 柘荣县| 兴化市| 驻马店市| 双江| 雷州市| 耿马| 太谷县| 巨野县| 商洛市| 呼和浩特市| 全椒县| 临清市| 龙州县| 防城港市| 赫章县| 定日县| 铜梁县| 郴州市| 泉州市| 西乌珠穆沁旗|