这里,我使用的是Code-First,MVC3。

  我们在数据库里建一个表MyTestPages,只有一个整型字段Id。
 
 在写一个Model类MyTestPages,代码如下
  public class MyTestPages
  {
    [Key]
    public int Id { get; set; }
  }
 
 建好表后,需要往里面插入一定量的数据,建议最好10万条以上,效果明显。
  首先看一下运行效果如下图所示。

  

  然后在HomeController里建一个名为Archtive的Action以及对于视图Archtive.cshtml。

  前台代码如下:

@model IEnumerable<Models.MyTestPages>

    <script type="text/javascript">
function GoPage(flag) {
window.open("/home/Archtive/"+flag+"/"+@ViewBag.PIndex, "_self");
}
</script> <table border="" cellpadding="" cellspacing="" height="200px" width="300px" bordercolor="blue">
<tr> <th height="30px">
序号
</th>
</tr>
@foreach(var item in Model)
{
<tr>
<td height="30px" align="center">
@item.Id
</td>
</tr>
} </table>
<table border="" cellpadding="" cellspacing="" width="300px">
<tr align="center">
<td style="height: 16px">
<input type="button" value="首页" name="First" id="First" onclick="GoPage('First')" />
<input type="button" value="上一页" name="Pre" id="Pre" onclick="GoPage('Pre')" />
<input type="button" value="下一页" name="Next" id="Next" onclick="GoPage('Next')" />
<input type="button" value="最后一页" name="Last" id="Last" onclick="GoPage('Last')" />
</td>
</tr>
</table>

前台代码

  在用户点击分页按钮时,调用了Js GoPage()函数

  window.open("/home/Archtive/"+flag+"/"+@ViewBag.PIndex, "_self");

  向Action传入了两个参数,MVC默认是只能传入一个参数的,因此,这里在添加了一个路由,代码如下(注意参数名称):

 routes.MapRoute("Default1",
"{controller}/{action}/{GoFlag}/{PageIndex}",
new { controller = "", action = "" },
new { });

  Controller代码如下:

   public ActionResult Archtive(string GoFlag, string PageIndex)
{ int PageSize = ;
int TotalCount = LzsDB.MyTestPages.Count();//获得此数据表中数据记录数
double PageCount = Math.Ceiling((double)TotalCount / (double)PageSize);//获得总页数
int NowPageIndex = ;
if (!string.IsNullOrEmpty(PageIndex))
{
int ErrorPageIndex = ;
if (!Int32.TryParse(PageIndex, out ErrorPageIndex))//如果不能转换成整数,则默认当前页码为1
{
PageIndex = "";
} NowPageIndex = Convert.ToInt32(PageIndex);//
}
GoFlag = string.IsNullOrEmpty(GoFlag) ? "First" : GoFlag;
switch (GoFlag)
{
case "First":
ViewBag.PIndex = ;
NowPageIndex = ;
break;
case "Pre":
if (Convert.ToInt32(PageIndex) - <= )
{
ViewBag.PIndex = ;
NowPageIndex = ;
}
else
{
ViewBag.PIndex = Convert.ToInt32(PageIndex) - ;
NowPageIndex = Convert.ToInt32(PageIndex) - ;
}
break;
case "Next":
if (Convert.ToInt32(PageCount) - Convert.ToInt32(PageIndex) <= )
//如果当前页是第最后页 则下一页没有后一页
{
ViewBag.PIndex = PageCount;
NowPageIndex = Convert.ToInt32(PageCount);
}
else
{
ViewBag.PIndex = Convert.ToInt32(PageIndex) + ;
NowPageIndex = Convert.ToInt32(PageIndex) + ;
}
break;
case "Last":
ViewBag.PIndex = PageCount;
NowPageIndex = Convert.ToInt32(PageCount);
break;
} string LastPageSize = (PageSize * (NowPageIndex - )).ToString(); string findSql = "select top " + PageSize + " * from MyTestPages "
+ "where Id not in( select top " + LastPageSize + " Id from MyTestPages order by Id) order by Id"; var TestPageModels = LzsDB.Database.SqlQuery<MyTestPages>(findSql);
return View(TestPageModels.ToList());
}

Controller代码

  这里对Linq to sql不太熟悉,因此,就使用了最原始的Sql分页语句获得数据。

MVC学习(四)几种分页的实现(1)的更多相关文章

  1. MVC学习四:Razor视图语法

    @{ Layout = null; } <hr /> <!DOCTYPE html> @this.GetType().Assembly.Location.ToString() ...

  2. MVC学习四

    第七节   讲述了增加model中类的属性,由于数据库中已存在表,表中没有存在新加的列,所以可以删除数据库或者在数据库中新增一列,另可以在controller中新增一个数据库初始化的类,并在Globa ...

  3. spring MVC 学习(四)---拦截器,视图解析器

    1.接口HandlerInterceptor 该接口包含3个方法,分别是preHandle,postHandle,afterCompletion,分别代表着执行前,执行后,执行完成要执行的方法,其中p ...

  4. MVC学习(四)几种分页的实现(3)

    在这篇MVC学习(四)几种分页的实现(2)博文中,根据URL中传入的两个参数(页码数,首页.上一页.下一页.末页的标记符)来获得对应的分页数据, 只是传入的参数太多,调用起来不太方便(标记符不能够写错 ...

  5. MVC学习(四)几种分页的实现(2)

    在第一种分页方式中,仅仅实现了分页,但并未有体现出MVC的优势,没有体现出泛型编程思想,尤其在数据量很大的时候,分页十分缓慢,除此之外,还没有实现很好的封装,不是一个通用方法. 因此,我希望只要传入数 ...

  6. sqlserver的四种分页方式

    第一种:ROW_NUMBER() OVER()方式 select * from ( select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId f ...

  7. asp.net mvc 的几种分页Pager

    第一种 /// <summary> /// 分页Pager显示 /// </summary> /// <param name="html">&l ...

  8. ASP.NET MVC中有四种过滤器类型

    在ASP.NET MVC中有四种过滤器类型

  9. .NET MVC 学习笔记(四)— 基于Bootstarp自定义弹出框

    .NET MVC 学习笔记(四)—— 基于Bootstarp自定义弹出框 转载自:https://www.cnblogs.com/nele/p/5327380.html (function ($) { ...

  10. Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发

    一.标准CRUD使用 对于标准的CRUD功能都有哪些以及MyBatisPlus都提供了哪些方法可以使用呢? 我们先来看张图: 1.1 环境准备 这里用的环境就是Java开发学习(四十)----MyBa ...

随机推荐

  1. CSS TYPOGRAPHY

    CSS TYPOGRAPHY Review Great job! You learned how to style an important aspect of the user experience ...

  2. Raft算法和Gossip协议

    简单介绍下集群数据同步,集群监控用到的两种常见算法. Raft算法 raft 集群中的每个节点都可以根据集群运行的情况在三种状态间切换:follower, candidate 与 leader.lea ...

  3. Eclipse实用操作

    1.缩进:Tab 2.退格:Shift+Tab 3.包结构展开方式:Package Presentation 4.快速定位文件:按ctrl键不放,鼠标移至链接处 5.为属性快速生成相应的get和set ...

  4. harbor仓库镜像的删除

    harbor仓库镜像的删除 刚开始自己摸索了下,直接webui界面删除后,发现仓库空间未释放 上传之前仓库空间占用为 上传之后仓库空间占用为 在webui界面上删除镜像后 查看大小 依旧为286m,到 ...

  5. form表单 获取与赋值

    form表单中使用频繁的组件: 文本框.单选框.多选框.下拉框.文本域form通过getValues()获取表单中所有name的值 通过setValues({key:values})给对应的name值 ...

  6. 24.类的加载机制和反射.md

    目录 1类的加载连接和初始化 1.1类的加载过程 1.2类的加载器 1.2.1类的加载机制 1类的加载连接和初始化 1.1类的加载过程 类的加载过程简单为分为三步:加载->连接->初始化 ...

  7. win10 搭建react-native开发环境

    本文地址:http://www.cnblogs.com/jying/p/7992130.html 系统:win10 系统内存:8G java-jdk:1.8.144 开发工具:vs code 首先是网 ...

  8. SqlServer数据库碎片整理——BCC SHOWCONTIG

    SQLServer提供了一个数据库命令——DBCC SHOWCONTIG——来确定一个指定的表或索引是否有碎片.  示例: DBCC SHOWCONTIG语法: 显示指定的表的数据和索引的碎片信息.  ...

  9. FMS Dev Guide学习笔记(SharedBall)

    一.开发交互式的媒体应用程序1.共享对象(Shared objects) ----SharedBall example 这个SharedBall example创建了一个临时的远程共享对象.类似于多人 ...

  10. C# 保证数据长度相同

    /// <summary> /// 保证数据长度相同 /// </summary> /// <param name="obj"></par ...