ASP.NET MVC利用PagedList分页(一)

61 篇文章 1 订阅
45 篇文章 0 订阅

前几天看见博客园上有人写ASP.NET MVC的分页思想,这让我不禁想起了PagedList。PagedList是NuGet上提供的一个分页的类库,能对任何IEnumerable<T>进行分页,而且非常简单好用。从NuGet上,可以获取两个DLL:PagedList.dll和PagedList.Mvc.dll。PagedList.dll提供分页的核心操作,PagedList.Mvc.dll是一个辅助类库,在创建分页的UI时候提供简单、可扩展的创建方法。不过PagedList.dll可以用于MVC2及其以上,但是PagedList .Mvc.dll只能用于MVC3(及其以上)。

使用PagedList:

(一)、安装PagedList:引用-->Add Library Package Reference--->OnLine All--->搜索PagedList,点击Install安装。(如果没有安装Nuget,可以到下面地址下载:http://www.nuget.org/

(二)、NuGet的好处就是我们不用再进行web.config等各种复杂的配置,所以下面直接编码:

using  PagedList;
.....
// Controller:PersonController
public ViewResult Index( int?  page)
{
int pageNumber = page ??  1 ;
int pageSize =  2 ;
var persons =  db.Persons.ToList();
return  View(persons.ToPagedList(pageNumber, pageSize));
}
......
// View:Views/Person/Index
@model PagedList.PagedList<XXX.Person>......
<div>
Page @(Model.PageCount 
< Model.PageNumber ?  0  : Model.PageNumber)
of @Model.PageCount

@if (Model.HasPreviousPage)
{
@Html.ActionLink(
" << "" Index "new { Page =  1  })
@Html.Raw(
"  " )
@Html.ActionLink(
" < Prve "" Index "new { Page = Model.PageNumber -  1  })
}
else
{
@:
<<
@Html.Raw(
"  " )
@:
<  Prev
}
@Html.Raw(
"  " )
@if (Model.HasNextPage)
{
@Html.ActionLink(
" Next > "" Index "new { Page = Model.PageNumber +  1  })
@Html.Raw(
"  " )
@Html.ActionLink(
" >> "" Index "new { Page =  Model.PageCount })
}
else
{
@:Next
>
@Html.Raw(
"  " )
@:
>>
}
</div>

 是不是很简单一句简单的ToPageList就会返回一个强类型的PagedList.PagedList<T>对象,而且PagedList.PagedList<T>实现了IPagedList接口,通过对象浏览器我们可以看到IPagedList提供了很多方法和属性供我们在View绑定时候使用(例如HasPreviousPage、HasNextPage、PageCount、PageNumer等等),如下图:

 不过还有两个问题:

第一、看了Controller中的代码,第一感觉是糟了。db.Persons.ToList() 太危险了,ToList时候数据已经执行,幻想一下,如果是百万甚至千万级的数据。。。所以这样不行。因为这里没有起到分页的效果。解决思路,赶紧组织其执行。

第二、View中绑定分页还有没有更好的方法,每次这样写是不是太费劲了呢?答案是肯定的,PagedList.Mvc.dll提供了分页导航功能。

利用PagedList优化分页:

// Controller: PersonController
public ViewResult Index( int?  page)
{
int pageNumber = page ??  1 ;
int pageSize =  2 ;
// Skip之前必须orderby
var persons =  from p<span bdsharebuttonbox"="" style="margin: 0px; padding: 0px;">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值