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

一、PageInfo类

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace ROIS.Models
{
/// <summary>
/// 分页信息
/// </summary>
public class PageInfo
{
private int _RecordCount = ;
private int _PageSize = ;
private int _CurrentPageNo=; /// <summary>
/// 获取或设置记录总数
/// </summary>
public int RecordCount
{
get
{
return _RecordCount;
}
set
{
if (value > )
{
_RecordCount = value;
}
}
} /// <summary>
/// 获取或设置每页记录数
/// </summary>
public int PageSize
{
get {
return _PageSize;
}
set {
if (value > )
{
_PageSize = value;
}
}
} /// <summary>
/// 获取或设置当前索引页码(从1开始计算)
/// </summary>
public int CurrentPageNo
{
get {
return _CurrentPageNo;
} set {
if (value > )
{
if (value > this.PageCount)
{
_CurrentPageNo = this.PageCount;
}
else
{
_CurrentPageNo = value;
}
}
}
} /// <summary>
/// 获取总页数
/// </summary>
public int PageCount
{
get
{
if (this.RecordCount <= )
{
return ;
} return this.RecordCount / this.PageSize + (this.RecordCount % this.PageSize > ? : );
}
} public PageInfo()
{ } public PageInfo(int recordCount, int currentPageNo, int pageSize = )
{
this.RecordCount = recordCount;
this.PageSize = pageSize;
this.CurrentPageNo = currentPageNo;
} /// <summary>
/// 是否为首页
/// </summary>
/// <returns></returns>
public bool IsFirstPage()
{
return (this.CurrentPageNo <= );
} /// <summary>
/// 是否为末页
/// </summary>
/// <returns></returns>
public bool IsLastPage()
{
return (this.CurrentPageNo>=this.PageCount);
} }
}

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

@using ROIS.Models;

@model PageInfo

@if (Model!=null && Model.RecordCount > )
{
<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 = ; 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

ASP.NET MVC分页实现的更多相关文章

  1. ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版

    MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...

  2. ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页

    我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了 ...

  3. 基于Bootstrap的Asp.net Mvc 分页

    基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...

  4. Asp.net MVC分页实例

    分页是网页基本功能,这里主要讨论在Asp.net MVC环境下分页的前端实现,不涉及后台分页.实现效果如下图显示: Step 1.建立分页信息类 public class PagingInfo { p ...

  5. 自己用的一个ASP.Net MVC分页拿出来分享下(转)

    实例懒得做.切几个图把代码发上要用的自己搞啦~ 下面是一个helper类. namespace System.Web.Mvc { public enum BarStyle { yahoo, digg, ...

  6. asp.net MVC分页

    .Net MVC  分页代码,分页的关键就是在于这几个参数pageIndex ,recordCount,pageSize ,下面是张林的网站做的一个简单的分页代码 效果如图 public class ...

  7. Asp.Net MVC 分页、检索、排序整体实现

    很多时候需要这样的功能,对表格进行分页.排序和检索.这个有很多实现的方式,有现成的表格控件.用前端的mvvm,用户控件.但很多时候看着很漂亮的东西你想进一步控制的时候却不那么如意.这里自己实现一次,功 ...

  8. 自己动手写 ASP.NET MVC 分页 part1

    学习编程也有一年半载了,从来没有自己动手写过东西,都是利用搜索软件找代码,最近偶发感慨,难道真的继续做码农??? 突发奇想是不是该自己动手写点东西,可是算法.逻辑思维都太弱了,只能copy网上的代码, ...

  9. ASP.NET MVC分页 Ajax+JsRender

    前段时间整mvc的分页,倒是很顺利,参考了以下几篇博客,启发很大. http://www.cnblogs.com/tangmingjun/archive/2012/05/30/2526301.html ...

随机推荐

  1. 修改oracle密码有效期限制

    racle11g,静默安装后用户的密码有效期默认设置为180天,180天后密码将失效,oracle会提示要修改密码.   我们项目用的是jdbc连接oracle数据库,没法自动处理oracle的这种密 ...

  2. 使用Microsoft.Office.Interop.Excel.Application xlApp 生成Excel

    object filePath = @"C:\" + DateTime.Now.ToShortDateString().Replace("-", "& ...

  3. ubuntu 13.10 Ralink RT3290 无线与蓝牙4.0的驱动安装

    我的本是hp envy15, 蓝牙与无线的型号是Ralink RT3290, 装了Ubuntu 13.10 64bit后,蓝牙无法使用,无线几秒钟就会断开,查知,是因为驱动问题. ## 准备工作 首先 ...

  4. [GraphQL] Use GraphQL's List Type for Collections

    In order to handle collections of items in a GraphQL Schema, GraphQL has a List Type. In this video, ...

  5. MyEclipse设置编码方式

    1.windows->Preferences……打开"首选项"对话框,左侧导航树,导航到general->Workspace, 右侧Text file encoding ...

  6. 15.6.8-sql小技巧

    取月头月尾: declare @someDay datetime,@firstDay datetime,@endDay datetime set @someDay='2015.2.2' ,) ,) s ...

  7. UDP"打洞"原理

    1. NAT分类 根据Stun协议(RFC3489),NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口 ...

  8. 将数据库表导入到solr索引

    将数据库表导入到solr索引 编辑solrcofnig.xml添加处理器 <requestHandler name="/dataimport" class="org ...

  9. wait、notify、notifyAll的阻塞和恢复

    前言:昨天尝试用Java自行实现生产者消费者问题(Producer-Consumer Problem),在coding时,使用到了Condition的await和signalAll方法,然后顺便想起了 ...

  10. Embedding Python in C

    http://codextechnicanum.blogspot.com/2013/12/embedding-python-in-c-converting-c.html //Make some vec ...