MVC EF分页实现
1.Model中分页方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
//命名空间用系统命名空间
namespace System.Web.Mvc
{
public static class MyHtmlHelperExt
{
// 传一个字符串过来,我给你封装成一个标签:<span>txt</span>
public static string GetLable(this HtmlHelper helper, string txt)
{
return string.Format("<span>{0}</span>", txt);
}
// 传一个字符串过来,我给你封装成一个标签:<span>txt</span>
public static MvcHtmlString GetMvcHtmlStringLable(this HtmlHelper helper, string txt)
{
string str = string.Format("<span>{0}</span>", txt);
//将上的str 转成 MvcHtmlString
// 创建一个实例:new
//本类有个静态方法帮我们创建 Create
//y有个工厂帮我们创建一个实例:HttpApplicationFactory
//return new MvcHtmlString(str);
//
return MvcHtmlString.Create(str);
}
// 传一个字符串过来,我给你封装成一个标签:<span>txt</span>
public static HtmlString GetHtmlStringLable(this HtmlHelper helper, string txt)
{
string str = string.Format("<span class='laoma'>{0}</span>", txt);
//将上的str 转成 MvcHtmlString
// 创建一个实例:new
//本类有个静态方法帮我们创建 Create
//y有个工厂帮我们创建一个实例:HttpApplicationFactory
//return new MvcHtmlString(str);
//
//return MvcHtmlString.Create(str);
return new HtmlString(str);
}
public static HtmlString ShowPageNavigate(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount)
{
var redirectTo = htmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath;
pageSize = pageSize == 0 ? 3 : pageSize;
var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //总页数
var output = new StringBuilder();
if (totalPages > 1)
{
//if (currentPage != 1)
{//处理首页连接
output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=1&pageSize={1}'>首页</a> ", redirectTo, pageSize);
}
if (currentPage > 1)
{//处理上一页的连接
output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>上一页</a> ", redirectTo, currentPage - 1, pageSize);
}
else
{
// output.Append("<span class='pageLink'>上一页</span>");
}
output.Append(" ");
int currint = 5;
for (int i = 0; i <= 10; i++)
{//一共最多显示10个页码,前面5个,后面5个
if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
{
if (currint == i)
{//当前页处理
//output.Append(string.Format("[{0}]", currentPage));
output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage, pageSize, currentPage);
}
else
{//一般页处理
output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage + i - currint, pageSize, currentPage + i - currint);
}
}
output.Append(" ");
}
if (currentPage < totalPages)
{//处理下一页的链接
output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>下一页</a> ", redirectTo, currentPage + 1, pageSize);
}
else
{
//output.Append("<span class='pageLink'>下一页</span>");
}
output.Append(" ");
if (currentPage != totalPages)
{
output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>末页</a> ", redirectTo, totalPages, pageSize);
}
output.Append(" ");
}
output.AppendFormat("第{0}页 / 共{1}页", currentPage, totalPages);//这个统计加不加都行
return new HtmlString(output.ToString());
}
}
}
2.控制器中写法
Entities db = new Entities();
public ActionResult Index()
{
var pageIndex = this.Request["pageIndex"] == null ? 1 : int.Parse(this.Request["pageIndex"]);
var pageSize = this.Request["pageSize"] == null ? 10 : int.Parse(this.Request["pageSize"]);
var total = db.yxs_orders.Count();
ViewData["pageIndex"] = pageIndex;
ViewData["pageSize"] = pageSize;
ViewData["total"] = total;
ViewData.Model = db.yxs_orders.OrderBy<yxs_orders, int>(u => u.Id)
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize);
return View();
}
3.前台调用
<div class="paginator"><%:Html.ShowPageNavigate((int)ViewData["pageIndex"],(int)ViewData["pageSize"],(int)ViewData["total"]) %></div>
4.样式
.paginator
{
font: 12px Arial, Helvetica, sans-serif;
padding: 10px 20px 10px 0;
margin: 0px;
}
.paginator a
{
border: solid 1px #ccc;
color: #0063dc;
cursor: pointer;
text-decoration: none;
}
.paginator a:visited
{
padding: 1px 6px;
border: solid 1px #ddd;
background: #fff;
text-decoration: none;
}
.paginator .cpb
{
border: 1px solid #F50;
font-weight: 700;
color: #F50;
background-color: #ffeee5;
}
.paginator a:hover
{
border: solid 1px #F50;
color: #f60;
text-decoration: none;
}
.paginator a, .paginator a:visited, .paginator .cpb, .paginator a:hover
{
float: left;
height: 16px;
line-height: 16px;
min-width: 10px;
_width: 10px;
margin-right: 5px;
text-align: center;
white-space: nowrap;
font-size: 12px;
font-family: Arial,SimSun;
padding: 0 3px;
}