ASP.NET MVC分页实现

简介:

ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FORM中,当然以后我会考虑实现基于URL分页的!

一、PageInfo类

复制代码
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5  
  6 namespace ROIS.Models
  7 {
  8     /// <summary>
  9     /// 分页信息
 10     /// </summary>
 11     public class PageInfo
 12     {
 13         private int _RecordCount = 0;
 14         private int _PageSize = 10;
 15         private int _CurrentPageNo=1;
 16  
 17         /// <summary>
 18         /// 获取或设置记录总数
 19         /// </summary>
 20         public int RecordCount
 21         {
 22             get
 23             {
 24                 return _RecordCount;
 25             }
 26             set
 27             {
 28                 if (value > 0)
 29                 {
 30                     _RecordCount = value;
 31                 }
 32             }
 33         }
 34  
 35         /// <summary>
 36         /// 获取或设置每页记录数
 37         /// </summary>
 38         public int PageSize
 39         {
 40             get {
 41                 return _PageSize;
 42             } 
 43             set {
 44                 if (value > 0)
 45                 {
 46                     _PageSize = value;
 47                 }
 48             }
 49         }
 50  
 51         /// <summary>
 52         /// 获取或设置当前索引页码(从1开始计算)
 53         /// </summary>
 54         public int CurrentPageNo
 55         {
 56             get {
 57                 return _CurrentPageNo;
 58             }
 59  
 60             set {
 61                 if (value > 0)
 62                 {
 63                     if (value > this.PageCount)
 64                     {
 65                         _CurrentPageNo = this.PageCount;
 66                     }
 67                     else
 68                     {
 69                         _CurrentPageNo = value;
 70                     }
 71                 }
 72             } 
 73         }
 74  
 75         /// <summary>
 76         /// 获取总页数
 77         /// </summary>
 78         public int PageCount
 79         {
 80             get
 81             {
 82                 if (this.RecordCount <= 0)
 83                 {
 84                     return 1;
 85                 }
 86  
 87                 return this.RecordCount / this.PageSize + (this.RecordCount % this.PageSize > 0 ? 1 : 0);
 88             }
 89         }
 90  
 91         public PageInfo()
 92         { }
 93  
 94         public PageInfo(int recordCount, int currentPageNo, int pageSize = 10)
 95         {
 96             this.RecordCount = recordCount;
 97             this.PageSize = pageSize;
 98             this.CurrentPageNo = currentPageNo;
 99         }
100  
101  
102         /// <summary>
103         /// 是否为首页
104         /// </summary>
105         /// <returns></returns>
106         public bool IsFirstPage()
107         {
108             return (this.CurrentPageNo <= 1);
109         }
110  
111  
112         /// <summary>
113         /// 是否为末页
114         /// </summary>
115         /// <returns></returns>
116         public bool IsLastPage()
117         {
118             return (this.CurrentPageNo>=this.PageCount);
119         }
120  
121     }
122 }
123  
复制代码

 

二、_Pager局部视图(建议放在Shared目录下)

复制代码
@using ROIS.Models;
 
@model PageInfo
 
@if (Model!=null && Model.RecordCount > 0)
{           
<div class="pager">
    第@(Model.CurrentPageNo) 页&nbsp;/&nbsp;共@(@Model.PageCount)页,
@if (Model.IsFirstPage())
{
    <span>|&lt;首&nbsp;&nbsp;页</span>
    <span>&lt;上一页</span>
}
else
{
    <a href="javascript:turnPage(1);">|&lt;首&nbsp;&nbsp;页</a>
    <a href="javascript:turnPage(@(Model.CurrentPageNo-1));">&lt;上一页</a>
}
@if (Model.IsLastPage())
{
    <span>下一页&gt;</span>
    <span>末&nbsp;&nbsp;页&gt;|</span>
}
else
{
     <a href="javascript:turnPage(@(Model.CurrentPageNo+1));">下一页&gt;</a>
     <a href="javascript:turnPage(@Model.PageCount);">末&nbsp;&nbsp;页&gt;|</a>
}
转到:
<select id="pages" onchange="javascript:turnPage(this.value);">
    @for (int i = 1; i <= Model.PageCount; i++)
    {
        if (Model.CurrentPageNo == i)
        {
        <option value="@i" selected="selected">第@(i)页</option>
        }
        else
        {
        <option value="@i">第@(i)页</option>
        }
    }
</select>
<input type="hidden" id="_pageno" name="_pageno" />
</div>
<script type="text/javascript">
<!--
    function turnPage(pageNo) {
        var oPageNo = document.getElementById("_pageno");
        oPageNo.value = pageNo;
        oPageNo.form.submit();
    }
 
    function getForm(obj) { //这个没有用到,但可以取代上面的oPageNo.form
        if (obj.parentNode.nodeName.toLowerCase() == "form") {
            return obj.parentNode;
        } else {
            getForm(obj.parentNode);
        }
    }
//-->
</script>
 
}
复制代码

 

三、使用方法:

后台Controller的Action中加入:

            string pageNo = Request.Form["_pageno"];
            int iPageNo = 1;
            int.TryParse(pageNo, out iPageNo);
            PageInfo pageInfo=new PageInfo(5000,iPageNo, 20);

            ViewBag.PageInfo = pageInfo;

前台VIEW页面代码如下:(注: ROIS是我专案名称,依实际情况更换)

@using (Html.BeginForm())
{
      这里面是数据列表HTML代码

      @Html.Partial("_Pager", ViewBag.PageInfo as ROIS.Models.PageInfo)

}

原文出自我的个人网站:http://www.zuowenjun.cn/post/2014/08/26/24.html

本文转自 梦在旅途 博客园博客,原文链接:http://www.cnblogs.com/zuowj/p/3937041.html  ,如需转载请自行联系原作者

相关文章
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
53 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
46 0
|
3月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
3月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
118 0
|
6月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
187 0
|
6月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
78 0
|
6月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
324 5
|
6月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界