`

ASP.NET MVP分页的实现

阅读更多

在ASP.NET中,GridView控件本身就带有分页的功能,只要把当前页面的索引值赋给GridView的PageIndex就可以实现了分页,至于数据怎么分页,全都由GridView封装起来了。

在ASP.NET MVC中分页的实现就只能靠自己来设计了。首先来说一下分页的原理。现在有一个张news表,中间有很多信息,我们假设一页显示5条记录,这样,页面数量=总记录数/5;这里,如果出现小数,得进位取整。如比总记录和数为51,那么分的页面数量是11,最后一页只有一条记录。好,有这样一个思路后,现在就来做ASP.NET MVC中的分页了。

1、 数据库和表

创建一个Data_Company的数据库,建一张news表,表结构如下图:

clip_image001

ID是主键,并助是自动增长列。

2、 现在,我们用O/R Designer来创建news表的LINQ To SQL的实体类。

创建一个名为MvcCompany的ASP.NET MVC Web Application项目,然后选中Models,右键,“添加”,“新建项”,选中C#中的“数据”,如下图:

clip_image003

选择“LINQ to SQL类”,名称设为“CompanyData.dbml”,然后“添加”。

打开“服务器资源管理器”,创建连接,展开表,找到news表,拖到CompanyData.dbml的左边表视图区(注:.dbml视图左边是SQL表和SQL视图区,右边是SQL存储过程和SQL函数区),效果如下图:

clip_image004

在“解决方案资源管理器”下的,“Models”多了三个文件,CompanyData.dbml,展开它,会有CompanyData.dbml.layout和CompanyData.designer.cs,前者是CompanyData.dbml视图的一些信息(比如news表在的坐标等信息),后者是news实体类及Data_Company数据库的类,在数据库类中聚合了news实体类。

3、 添加news列表类。因为一个news实体类,一次只能表示一条记录,如果呈现一个news表中的数据,最好定义一个集合类来存临时来存放news记录的集合。

类的实现如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

namespace MvcCompany.Models

{

public class NewList: List

{

///

/// 页面索引值

///

public int PageIndex { get; private set; }

///

/// 每页记录的数量

///

public int PageSize { get; private set; }

///

/// 记录总条数

///

public int TotalCount { get; private set; }

///

/// 共有的页数和

///

public int TotalPages { get; private set; }

public NewList(IQueryablesource, 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 < AllPages); }

}

}

}

这里,我们实现了一个泛型的集合列表NewList(当然,这里的本质上可以当其他实体类的集合列表),在这个类中间,有四个字段,访问修饰符都是public的,分另为:

PageIndex:当前页面的索引值

PageSize:每个页面的记录的条数

AllCount:记录的总条数

AllPages:共有的页面总数

在NewList 构造函数中,有如下代码:

public NewList(IQueryablelist, int pageIndex, int pageSize)

{

1 PageIndex = pageIndex;

2 PageSize = pageSize;

3 AllCount = source.Count();

4 AllPages = (int)Math.Ceiling(AllCount / (double)pageSize);

5 this.AddRange(list.Skip(PageIndex * PageSize).Take(PageSize));

}

构造函的参数有三个,一个是list,就是实体类的一个集合,还有就是页面索引值和每个页面的记录条数。

第1、2代码很容易理角,第3行代码是得到列表的总记录条数,第4行代码,就完成了我们在开始时分析的分页实现的公式:页面数量=总记录数/每页记录数,其中Math.Ceiling就是把小数部分进到整数的函数。

最关键的是第5行代码,首先看Skip(PageIndex*PageSize),页面索引值乘上每页记录数,得到是当前页面以前的所有记录数,Skip是跳过这些记录,而得到后面的所有记录,Take(PageSize)是得到PageSize条数的记录,比如,我们想要第三页的记录,这个页面的索引值为2(因为索引值从0开始)PageIndex=2,每页显示5条记录,PageSize=5,就是要跳过list中的前10条记录,然后再取前5条记录,即取list中的第11条到第15条记录,也就是第3页的记录了。

在这里,微软提供了Skip和Tabke函数,让我们做起分页来,得心应手。

接下来是this.AddRange()函数,可以把批量的数据放到当前集合中(因为NewList本身就是一个集合)。

代码的后半部分是两个属性:

public bool HasPreviousPage

{

get { return (PageIndex > 0); }

}

public bool HasNextPage

{

get { return (PageIndex + 1 < AllPages); }

}

这两个属性是为页面显示“上一页”和“下一页”,因为当我们显示第一页的时候,“上一页”是不需要显示的,如果最后一页,是没有“下一页“的,所以在这里定义了两个属性,来判断是否有上一页和下一页。

先看HasPreviousPage属性,如果PageIndex是大于0的,说明不是在第一页,所以就反回true,如果小于等于0(在这里小于0是没有意思义的,因为页面的索引值最小是0),说明是第一页,所以返回是false。

再看HasNextPage属性,因为页面索引值的最大数,与页面的最大数差1(索引从0开始的原因),所以当PageIndex+1小于AllPages时,说没有没到最后一页,返回值是true,如果PageIndex+1大于等于AllPages时(大于也没有意义),说明是最后一页,返回值为false。

分享到:
评论

相关推荐

    ASP.NET Repeater分页,查询分页

    ASP.NET Repeater分页,查询分页 ASP.NET Repeater分页,查询分页 ASP.NET Repeater分页,查询分页 ASP.NET Repeater分页,查询分页 ASP.NET Repeater分页,查询分页

    ASP.NET MVP模式实现(被动视图,依赖注入)

    在实现ASP.NET MVP模式时,依赖注入(Dependency Injection,DI)是一种常用的技术,用于降低组件间的耦合度。通过DI,我们可以将Model对象传递给Presenter,而不是让Presenter直接创建Model实例。这增强了代码的...

    asp.net AJAX分页 分页代码

    ASP.NET AJAX分页技术是Web开发中的一个重要概念,它允许用户在不刷新整个页面的情况下实现数据的分块加载,提供流畅的用户体验。本教程将深入探讨ASP.NET AJAX分页的相关知识点,以及如何编写分页代码。 1. **什么...

    asp.net 自定义分页

    以下是一份简单的自定义分页实现步骤: 1. **数据获取**:与SQL数据库交互,使用`SELECT`语句结合`OFFSET`和`FETCH NEXT`或`TOP`子句来获取特定页的数据。例如: ```sql SELECT * FROM YourTable OFFSET ...

    asp.net mvc 分页的完整实现及源码下载

    本教程将深入探讨如何在ASP.NET MVC中实现完整的分页功能,并提供源码下载供参考。 首先,我们需要理解分页的基本概念。分页是将大数量的数据分成多个小部分(页)来显示,用户可以逐页浏览,而不是一次性显示所有...

    asp.net2.0 分页控件

    ASP.NET 2.0 分页控件是一种网页开发技术,用于在大量数据中实现高效的页面导航,以提高用户体验。在ASP.NET框架下,分页功能是通过数据绑定控件(如GridView, DataList或Repeater)内置的分页功能或者自定义控件来...

    ASP.NET MVC分页功能的实现的资源

    在ASP.NET MVC中,分页功能是实现大型数据集浏览时不可或缺的一部分,它能够有效地管理用户界面,提高用户体验。本文将深入探讨如何在ASP.NET MVC中实现分页功能,并重点关注"MvcPaging"这个标签扩展库。 首先,让...

    asp.net 异步分页

    在ASP.NET中实现异步分页通常涉及以下几个关键步骤: 1. **数据库优化**:首先,为了高效地处理分页,数据库层面需要进行优化。这可能包括创建合适的索引、调整查询语句,使其只获取特定页的数据,以及利用存储过程...

    ASP.Net手写分页

    首先,让我们深入理解ASP.NET中的分页实现。通常,我们可以使用两种方法:服务器端分页和数据库分页。服务器端分页是在服务器上加载所有数据,然后根据当前页码筛选显示的部分;而数据库分页则是在数据库层面进行...

    C# ASP.net自定义分页

    ### C# ASP.NET 自定义分页控件解析 ...上述代码片段展示了如何在ASP.NET应用程序中实现一个简单的分页功能,并提供了详细的配置选项。开发者可以根据实际需求调整这些选项,从而更好地满足用户体验的需求。

    asp.net24种分页含源码

    源码包中的文件可能包含了以上提到的一些或全部分页方法的实现,这为学习和实践ASP.NET分页提供了丰富的素材。通过分析这些源代码,开发者可以深入理解各种分页技术的工作原理,以及如何在实际项目中应用它们。 在...

    ASP.NET AJAX分页控件

    ASP.NET AJAX分页控件是一种在Web应用中实现动态、交互式用户体验的关键技术。它结合了ASP.NET的强大功能和AJAX(Asynchronous JavaScript and XML)的异步特性,以提高网页加载速度,优化用户界面,并减少不必要的...

    Ajax分页 Asp.net 分页

    在Asp.net框架下,结合Ajax技术实现分页,可以让页面在不刷新整个页面的情况下更新数据,提升交互性。本教程将深入探讨如何在Asp.net中实现Ajax分页。 首先,我们需要理解Ajax(异步JavaScript和XML)的核心概念。...

    ASP.NET MVC分页

    在ASP.NET MVC框架中,我们可以利用内置的工具和自定义逻辑来实现高效且用户友好的分页功能。 首先,理解MVC模式(Model-View-Controller)的基础是至关重要的。在ASP.NET MVC中,模型(Model)负责数据管理,视图...

    ASP.NET分页功能的实现

    本教程将详细介绍如何使用AspNetPager控件来实现ASP.NET分页功能。 AspNetPager控件是由WUCtrl公司开发的一款高效、易用的分页控件,它可以轻松地集成到ASP.NET应用中,提供丰富的自定义选项和强大的性能。下面我们...

    asp.net 通用分页类

    `asp.net 通用分页类`就是为了解决这个问题而设计的,它允许开发者创建一个可复用的组件,以便在不同的数据展示页面上实现高效且灵活的分页功能。 首先,我们来看`C#`语言是如何实现分页逻辑的。在C#中,可以创建一...

    ASP.NET分页一(Table)

    在ASP.NET中,可以使用多种方式实现分页,如ASP.NET Web Forms的GridView控件、ASP.NET MVC的PagedList库等。 在SQL Server中,`SET COUNT`是用于设置返回行数的语句,常与分页结合使用。当启用`SET COUNT ON`时,...

    asp.net文章分页

    本文将深入探讨如何在ASP.NET中实现文章的分页功能,包括静态分页的原理和实践。 一、理解分页基础 1. 分页概念:分页是将大量数据分为多个部分(页)进行显示,用户可以逐页浏览,而不是一次性显示所有内容。在...

    Asp.net通用分页控件

    5. **兼容性**:AspNetPager 7.2兼容各种ASP.NET版本,包括.NET Framework 4.x及更高版本,并且与AJAX集成良好,可实现异步分页,提升用户体验。 6. **API友好**:提供了丰富的属性和方法,如PageSize、...

    asp.net 分页控件(包括demo)

    标题中的“asp.net分页控件”指的是用于在网页上实现数据分页显示的ASP.NET控件。这种控件通常与数据绑定控件(如GridView、ListView等)一起使用,以分批次加载数据库中的数据,使得用户能够逐页浏览,而不是一次性...

Global site tag (gtag.js) - Google Analytics