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

04-13 16:11