在MVC里面 怎样实现分页

在MVC里面 怎样实现分页,第1张

现说真分和假分吧..就像'足球'说的一样 在数据库进行查询直接过滤掉不需要的数据后比如得到一个记录集的第11条道第20条.这个11到20是在数据库中进行查询出来.在代码中得到的rs,rs的记录长度就是10个..吧这10个记录显示到jsp页面上,这种分页方法就是真分..

假分是得到数据集合后在去过滤.这个就是假分..所以足球说的就不确切了..得到的数据集合过滤和显示是可以在jsp页面实现也是可以在javabean中实现的..这种得到数据集合后再去分页的方法是假分.

分页其实就只有真分和假分.怎么实现就在于你真分就要在构在sql语句时去费功夫..而假分就是要在代码中下功夫..侧重点不同.性能不同..如果数据量大的话你的假分页就会把你的系统down掉.真分的行嫩个会很好,但是不容易抽象成一种公用的方法..假分页在数据量不大的情况下还是比较好用.可以抽象成一个公用方法..

就是这些区别..根据你的业务需求来区分吧..MVC只是一个规范..分页是一个方法..两个不搭嘎的...

 MVC项目中有的时候List的条数比较多,需要分页显示,可以用如下的办法:

1、写一个简单PaginatedList 辅助类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

public class PaginatedList<T>: List<T>{

public int PageIndex { getprivate set}

public int PageSize { getprivate set}

public int TotalCount { getprivate set}

public int TotalPages { getprivate set}

public PaginatedList(IQueryable<T>source, int pageIndex, int pageSize) {

PageIndex = pageIndex

PageSize = pageSize

TotalCount = source.Count()

TotalPages = (int) Math.Ceiling(TotalCount / (double)PageSize)

this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize))

}

public bool HasPreviousPage {

get {

return (PageIndex >0)

}

}

public bool HasNextPage {

get {

return (PageIndex+1 <TotalPages)

}

}

}

 2、Controller中使用这个PaginatedList 类来返回View:

1

2

3

4

5

6

public ActionResult Index(int? page) {

const int pageSize = 10

var upcomingDinners = dinnerRepository.FindUpcomingDinners()

var paginatedDinners = new PaginatedList<Dinner>(upcomingDinners, page ?? 0,pageSize)

return View(paginatedDinners)

}

3、View中实现导航链接的Code如下:

1

2

3

4

5

6

7

8

 <% if (Model.HasPreviousPage) { %>

<%= Html.RouteLink("<<<", "UpcomingDinners", new { page =

(Model.PageIndex-1) }) %>

<% } %>

<% if (Model.HasNextPage) { %>

<%= Html.RouteLink(">>>", "UpcomingDinners", new { page = (Model.PageIndex +

1) }) %>

<% } %>

ASP.NET MVC中进行分页的方式有多种,但在NuGet上使用最广泛的就是用PagedList、X.PagedList.Mvc进行分页。(原名为:PagedList.Mvc,但是2014年开始,作者将项目名称改名字为“X.PagedList.Mvc”),用这个插件的话会非常便利,大家可以试试,接下来将给大家讲下如何安装这个NuGet插件。

ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(原名为PagedList.Mvc)

1、工具——NuGet 程序包管理器——管理解决方案的 NuGet 程序包

2、 搜索“X.PagedList.Mvc”,并安装、引用

3、\Controllers\UserController.cs 后台代码基本用法:

?

1

2

3

4

5

6

7

8

9

10

11

12

using PagedList

// GET: User/1

public ActionResult Index(int page = 1)

{

const int pageSize = 10

//List<User>users = (from u in db.Users

// orderby u.Id descending

// select u).Skip((page - 1) * pageSize).Take(pageSize).ToList()

//return View(users)

var iUsers = db.Users.OrderBy(p =>p.Id).ToPagedList(page, pageSize)

return View(iUsers)

}

4、\Views\User\Index.cshtml 前台代码基本用法:

?

1

2

3

4

5

6

7

8

@using PagedList

@using PagedList.Mvc

<table class=“table”>

xxxx

xxxx

xxxx

</table>

@Html.PagedListPager((IPagedList)Model, page =>Url.Action(“Index”, new { page }))

5、\App_Start\RouteConfig.cs 配置一下:

?

1

2

3

4

5

6

7

8

9

10

11

12

public class RouteConfig

{

public static void RegisterRoutes(RouteCollection routes)

{

routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”)

routes.MapRoute(

name: “Default”,

url: “{controller}/{action}/{page}”,

defaults: new { controller = “User”, action = “Index”, page = UrlParameter.Optional }

)

}

}

6、效果图:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11533540.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存