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

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

  

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

  前台代码如下:

  1. @model IEnumerable<Models.MyTestPages>
  2.  
  3. <script type="text/javascript">
  4. function GoPage(flag) {
  5. window.open("/home/Archtive/"+flag+"/"+@ViewBag.PIndex, "_self");
  6. }
  7. </script>
  8.  
  9. <table border="" cellpadding="" cellspacing="" height="200px" width="300px" bordercolor="blue">
  10. <tr>
  11.  
  12. <th height="30px">
  13. 序号
  14. </th>
  15. </tr>
  16. @foreach(var item in Model)
  17. {
  18. <tr>
  19. <td height="30px" align="center">
  20. @item.Id
  21. </td>
  22. </tr>
  23. }
  24.  
  25. </table>
  26. <table border="" cellpadding="" cellspacing="" width="300px">
  27. <tr align="center">
  28. <td style="height: 16px">
  29. <input type="button" value="首页" name="First" id="First" onclick="GoPage('First')" />
  30. <input type="button" value="上一页" name="Pre" id="Pre" onclick="GoPage('Pre')" />
  31. <input type="button" value="下一页" name="Next" id="Next" onclick="GoPage('Next')" />
  32. <input type="button" value="最后一页" name="Last" id="Last" onclick="GoPage('Last')" />
  33. </td>
  34. </tr>
  35. </table>

前台代码

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

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

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

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

  Controller代码如下:

  1. public ActionResult Archtive(string GoFlag, string PageIndex)
  2. {
  3.  
  4. int PageSize = ;
  5. int TotalCount = LzsDB.MyTestPages.Count();//获得此数据表中数据记录数
  6. double PageCount = Math.Ceiling((double)TotalCount / (double)PageSize);//获得总页数
  7. int NowPageIndex = ;
  8. if (!string.IsNullOrEmpty(PageIndex))
  9. {
  10. int ErrorPageIndex = ;
  11. if (!Int32.TryParse(PageIndex, out ErrorPageIndex))//如果不能转换成整数,则默认当前页码为1
  12. {
  13. PageIndex = "";
  14. }
  15.  
  16. NowPageIndex = Convert.ToInt32(PageIndex);//
  17. }
  18. GoFlag = string.IsNullOrEmpty(GoFlag) ? "First" : GoFlag;
  19. switch (GoFlag)
  20. {
  21. case "First":
  22. ViewBag.PIndex = ;
  23. NowPageIndex = ;
  24. break;
  25. case "Pre":
  26. if (Convert.ToInt32(PageIndex) - <= )
  27. {
  28. ViewBag.PIndex = ;
  29. NowPageIndex = ;
  30. }
  31. else
  32. {
  33. ViewBag.PIndex = Convert.ToInt32(PageIndex) - ;
  34. NowPageIndex = Convert.ToInt32(PageIndex) - ;
  35. }
  36. break;
  37. case "Next":
  38. if (Convert.ToInt32(PageCount) - Convert.ToInt32(PageIndex) <= )
  39. //如果当前页是第最后页 则下一页没有后一页
  40. {
  41. ViewBag.PIndex = PageCount;
  42. NowPageIndex = Convert.ToInt32(PageCount);
  43. }
  44. else
  45. {
  46. ViewBag.PIndex = Convert.ToInt32(PageIndex) + ;
  47. NowPageIndex = Convert.ToInt32(PageIndex) + ;
  48. }
  49. break;
  50. case "Last":
  51. ViewBag.PIndex = PageCount;
  52. NowPageIndex = Convert.ToInt32(PageCount);
  53. break;
  54. }
  55.  
  56. string LastPageSize = (PageSize * (NowPageIndex - )).ToString();
  57.  
  58. string findSql = "select top " + PageSize + " * from MyTestPages "
  59. + "where Id not in( select top " + LastPageSize + " Id from MyTestPages order by Id) order by Id";
  60.  
  61. var TestPageModels = LzsDB.Database.SqlQuery<MyTestPages>(findSql);
  62. return View(TestPageModels.ToList());
  63. }

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. PHP常量总结

    概念 常量我们可以理解为值不变的量.常量只要被定义了,在程序脚本的其他任何地方都不能改变. 因为常量被定义后不能被修改,所以即使重定义常量的值,常量的值也是第一次定义常量时的值 常量不管在哪里被定义, ...

  2. ReactiveX 学习笔记(10)可连接的数据流

    Connectable Observable Operators 本文的主题为处理 Connectable Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. R ...

  3. Extjs实现Grid表格显示【一】

    Ext.onReady(function(){ // Ext.Msg.alert("提示","hello world!! "); var stu =new Ex ...

  4. 17.嵌入ace插件

    我们想 在problem-detail上具体显示代码 建一个component 叫 editor 将ace集成上去,算是他的画布吧. 支持各种语言 可以reset  提交写好的代码到server端编译 ...

  5. 案例:Spark基于用户的协同过滤算法

    https://mp.weixin.qq.com/s?__biz=MzA3MDY0NTMxOQ==&mid=2247484291&idx=1&sn=4599b4e31c2190 ...

  6. tensorflow serving 中 No module named tensorflow_serving.apis,找不到predict_pb2问题

    最近在学习tensorflow serving,但是运行官网例子,不使用bazel时,发现运行mnist_client.py的时候出错, 在api文件中也没找到predict_pb2,因此,后面在网上 ...

  7. 用工厂模式和策略模式优化过多的if-else

    多个if-else代码: @RunWith(SpringRunner.class) @SpringBootTest public class EducationalBackgroundTest { p ...

  8. python教程_1

    1.2 不同应用领域的主流操作系统 (1)桌面操作系统 (2)服务器操作系统 (3)嵌入式操作系统 (4)移动设备操作系统 1>.桌面操作系统: Windows系列(微软的.net开发) 用户群 ...

  9. Gamma Correction

    [Gamma Correction] 磁盘上存储的纹理可分为Linear Texture.Gamma Texture. sRGB sampling allows the Unity Editor to ...

  10. metasploit framework(八):snmp扫描,暴力破解

    snmp扫描linux 设置相关参数,这里使用的默认字典,你可以自己制定字典. run 然后使用枚举模块 设置相关参数 run,详细的信息就枚举出来了 snmp扫描windows 先枚举用户 设置目标 ...