分页是项目开发中最常用的功能
四要素:1.总数据数量(totalCount)2. 总页码(PageCount ) 3 当前页码(PageIndex ) 4 每页显示的数据数量(pageSize)
分页在项目中肯定是不止一个页面去使用的,所以效率方面应该将分页的方法写入 common共用的类方法中,而这个成员变量就是这4要素,之后通过类new一个对象来可以调用出这4个要素去使用。
具体思想:将总数据筛选出来当前页码所需数据,并且总页码是一直保留,当前页码通过样式区分显示
公共方法:
public class PagingHelp<T>
{
//构造函数
public PagingHelp(int pageSize, IEnumerable<T> dataSource, int totalCount)
{
this.PageSize = pageSize > 1 ? pageSize : 1;
this.DataSource = dataSource;
PageCount = (int)Math.Ceiling(totalCount / (double)pageSize);
}
#region 分页四要素 四个成员变量
/// <summary>
/// 分页源数据
/// </summary>
public IEnumerable<T> DataSource { get; private set; }
/// <summary>
/// 每页记录数量
/// </summary>
public int PageSize { get; private set; }
/// <summary>
/// 当前页数
/// </summary>
public int PageIndex { get; set; }
#endregion
//分页总数
public int PageCount { get; private set; }
//是否有前一页
public bool HasPrev { get { return PageIndex > 1; } }
//是否有后一页
public bool HasNext { get { return PageIndex < PageCount; } }
public IEnumerable<T> GetPagingData()
{
return DataSource.Skip((PageIndex - 1) * PageSize).Take(PageSize);//EF方法
}
}
控制器方法调用:
var DataSource=数据源;
PagingHelp<ViewModel> pageMod =
new PagingHelp<ViewModel>(20, DataSource, DataSource.count) { PageIndex = pageIndex };
return View(pageMod);
页面就可以使用这个分页对象来使用: 命名空间自己要加上
@model PagingHelp<ViewModel>
@{
List<ViewModel> List = Model.GetPagingData().ToList();
}
<thead>
<tr >
<th ></th>
</tr>
</thead>
<tbody>
@if (List.Count > 0)
{
foreach (var item in List)
{
<tr>
<td>
@item.列名
</td>
</tr>
}
<tr> (分页页码显示的逻辑判段前4页后5页...最后一页 样式和页码显示效果可自定义)
<td colspan="9">
<div style="text-align: center;">
<div class="pages" style="width:100%;">
@if (Model.PageCount > 0)
{
<a href="javascript:void(0);" οnclick="Search(1)" style="margin-right:5px;">Home</a>
}
@{
Int32 shouNum = 10;
int first = Model.PageIndex - 4;
int last = Model.PageIndex + 5;
if (first <= 0)
{
first = 1;
}
if (last > Model.PageCount)
{
last = Model.PageCount;
}
if (last < shouNum && Model.PageCount >= shouNum)
{
last = shouNum;
}
if (first + (shouNum - 1) > Model.PageCount && Model.PageCount >= shouNum)
{
first = Model.PageCount - shouNum + 1;
}
}
@for (int i = first; i <= last; i++)
{
if (i == Model.PageIndex)
{
<span class="cpb" style="margin-right:5px;">@i</span>
}
else
{
<a href="javascript:void(0);" οnclick="Search(@i)" style="margin-right:5px;">@i</a>
}
}
@if (Model.PageCount != last)
{
<span style="margin-right:5px;">......</span>
<a href="javascript:void(0);" οnclick="Search(@Model.PageCount)" style="margin-right:5px;">@Model.PageCount</a>
}
@if (Model.PageCount > 0)
{
<a href="javascript:void(0);" οnclick="Search(@Model.PageCount)" style="margin-right:5px;">Last</a>
}
</div>
</div>
</td>
</tr>
}
else
{
<tr><td colspan="8" align="center">-No Data-</td></tr>
}
</tbody>