这个参考了传智播客的视频源码,并且在基础上得到了改进,本人代码写的比较烂,大神轻喷
/// <summary>
/// 自定义分页控件 ,在@Html上扩展的一个方法
/// </summary>
/// <param name="htmlhelper">当前@Html对象</param>
/// <param name="area">区域名称</param>
/// <param name="controller">控制器名称</param>
/// <param name="action">方法名称</param>
/// <param name="pagesize">每页显示数据的条数</param>
/// <param name="totalcount">当前分页列表的所有数据总条数</param>
/// <returns></returns>
public static MvcHtmlString PageBarBulider(this HtmlHelper htmlhelper, string area, string controller, string action, int pagesize, int totalcount)
{
//从url参数pageindex 获取当前的页索引
string currentpageindex = HttpContext.Current.Request.QueryString["pageindex"];
int icurrentPi = 1;
//由于第一次进入某个列表页面是不会带有pageindex和pagesize参数的,所以currentpageindex 有可能为空
//当为空的时候应该赋值1才正常
if (string.IsNullOrEmpty(currentpageindex))
{
icurrentPi = 1;
}
else
{
icurrentPi = Convert.ToInt32(currentpageindex);
}
//1.0 计算出当前列表总共有多少页数据
decimal pagecount = Math.Ceiling((totalcount / Convert.ToDecimal(pagesize)));
//2.0 拼装当前分页控件使用的url
string areaPix = string.IsNullOrEmpty(area) ? "" : "/" + area;
string urlfmt = areaPix + "/" + controller + "/" + action + "?pageindex={0}&pagesize={1}";
StringBuilder html = new StringBuilder(200);
if (icurrentPi >= 5 && icurrentPi <= pagecount - 4)//根据自己的需求
{
html.Append("<div class='col-lg-6 col-lg-offset-5' id='pagebar'><ul class='pagination pagination - sm'>");
html.Append("<li><a href=\"" + string.Format(urlfmt, icurrentPi == 1 ? 1 : icurrentPi - 1, pagesize) + "\">«</a></li>");
//获取上一页的链接
html.Append("<li><a href=\"" + string.Format(urlfmt, 1, pagesize) + "\">" + 1 + "</a></li>");
//第一页
html.Append("<li><a href='javascript:void(0)'>...</a></li>");
html.Append("<li><a href=\"" + string.Format(urlfmt, icurrentPi - 1, pagesize) + "\">" + (icurrentPi - 1) + "</a></li>");
//当前页的上一页
html.Append("<li class='active'><a href=\"" + string.Format(urlfmt, icurrentPi, pagesize) + "\">" + icurrentPi + "</a></li>");
//当前页
html.Append("<li ><a href=\"" + string.Format(urlfmt, icurrentPi + 1, pagesize) + "\">" + (icurrentPi + 1) + "</a></li>");
//当前页的下一页
html.Append("<li><a href='javascript:void(0)'>...</a></li>");
html.Append("<li><a href=\"" + string.Format(urlfmt, pagecount, pagesize) + "\">" + pagecount + "</a></li>");
//最后一页
html.Append("<li><a href=\"" + string.Format(urlfmt, icurrentPi == 1 ? 1 : icurrentPi + 1, pagesize) + "\">»</a></li>");
//获取下一页的链接
html.Append("</ul></div>");
}
else if (icurrentPi>pagecount-4&&pagecount>7)
{
html.Append("<div class='col-lg-6 col-lg-offset-5' id='pagebar'><ul class='pagination pagination - sm'>");
html.Append("<li><a href=\"" + string.Format(urlfmt, icurrentPi == 1 ? 1 : icurrentPi - 1, pagesize) + "\">«</a></li>");
//获取上一页的链接
html.Append("<li><a href=\"" + string.Format(urlfmt, 1, pagesize) + "\">" + 1 + "</a></li>");
//第一页
html.Append("<li class='disabled'><a href='javascript:void(0)'>...</a></li>");
for (int i = 5; i >= 0; i--)
{
if (icurrentPi == (pagecount - i))
{
html.Append("<li class='active'><a href=\"" + string.Format(urlfmt, pagecount - i, pagesize) + "\">" + (pagecount - i) + "</a></li>");
}
else
{
html.Append("<li><a href=\"" + string.Format(urlfmt, pagecount - i, pagesize) + "\">" + (pagecount - i) + "</a></li>");
}
}
html.Append("<li><a href=\"" + string.Format(urlfmt, icurrentPi == 1 ? 1 : icurrentPi + 1, pagesize) + "\">»</a></li>");
//获取下一页的链接
html.Append("</ul></div>");
}
//页面第一次请求的时候,执行最初的代码
else
{
html.Append("<div class='col-lg-6 col-lg-offset-5' id='pagebar'><ul class='pagination pagination - sm'>");
html.Append("<li ><a href=\"" + string.Format(urlfmt, icurrentPi == 1 ? 1 : icurrentPi - 1, pagesize) + "\">«</a></li>");
if (pagecount > 7)
{
for (int i = 1; i < 6; i++)
{
if (icurrentPi == i)
{
html.Append("<li class='active'><a href=\"" + string.Format(urlfmt, i, pagesize) + "\">" + i + "</a></li>");
}
else
{
html.Append("<li><a href=\"" + string.Format(urlfmt, i, pagesize) + "\">" + i + "</a></li>");
}
}
html.Append("<li><a href='javascript:void(0)'>...</a></li>");
}
else
{
for (int i = 1; i <= pagecount - 1; i++)
{
html.Append("<li><a href=\"" + string.Format(urlfmt, i, pagesize) + "\">" + i + "</a></li>");
}
}
html.Append("<li><a href=\"" + string.Format(urlfmt, pagecount, pagesize) + "\">" + pagecount + "</a></li>");
html.Append("<li><a href=\"" + string.Format(urlfmt, icurrentPi == pagecount ? pagecount : icurrentPi + 1, pagesize) + "\">»</a></li>");
html.Append("</ul></div>");
}
return new MvcHtmlString(html.ToString());
}
控制器里面的代码
public ActionResult index()
{
string pageIndex = Request.QueryString["pageindex"];
string pagesize = Request.QueryString["pagesize"];
int ipageIndex = 1;
int ipageSize = 5;
if (!int.TryParse(pageIndex, out ipageIndex)){
ipageIndex = 1;
}
else if (!int.TryParse(pagesize, out ipageSize))
{
ipageSize = 5;
}
OnlineBorrowEntities db = new OnlineBorrowEntities();
int skip = (ipageIndex-1) * ipageSize;
var list = db.UseableInfo.OrderBy(c=>c.id).Skip(skip).Take(ipageSize).ToList();
ViewData["aviliableRoomInfo"] = list;
return View();
}
前端验证
window.onloaf=function()
{
var oDiv = document.getElementById('pagebar');
var oUl = oDiv.getElementsByTagName('ul')[0];
var aLi = oUl.getElementsByTagName('li');
if (aLi[1].getAttribute('class') == 'active')
{
var A = aLi[0].getElementsByTagName('a')[0];
A.setAttribute('href', 'javascript:void(0)');
}
else if (aLi[aLi.length - 2].getAttribute('class') == 'active')
{
var A = aLi[aLi.length-1].getElementsByTagName('a')[0];
A.setAttribute('href', 'javascript:void(0)');
}
}