MVC学习(四)几种分页的实现(1)
这里,我使用的是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)的更多相关文章
- MVC学习四:Razor视图语法
@{ Layout = null; } <hr /> <!DOCTYPE html> @this.GetType().Assembly.Location.ToString() ...
- MVC学习四
第七节 讲述了增加model中类的属性,由于数据库中已存在表,表中没有存在新加的列,所以可以删除数据库或者在数据库中新增一列,另可以在controller中新增一个数据库初始化的类,并在Globa ...
- spring MVC 学习(四)---拦截器,视图解析器
1.接口HandlerInterceptor 该接口包含3个方法,分别是preHandle,postHandle,afterCompletion,分别代表着执行前,执行后,执行完成要执行的方法,其中p ...
- MVC学习(四)几种分页的实现(3)
在这篇MVC学习(四)几种分页的实现(2)博文中,根据URL中传入的两个参数(页码数,首页.上一页.下一页.末页的标记符)来获得对应的分页数据, 只是传入的参数太多,调用起来不太方便(标记符不能够写错 ...
- MVC学习(四)几种分页的实现(2)
在第一种分页方式中,仅仅实现了分页,但并未有体现出MVC的优势,没有体现出泛型编程思想,尤其在数据量很大的时候,分页十分缓慢,除此之外,还没有实现很好的封装,不是一个通用方法. 因此,我希望只要传入数 ...
- sqlserver的四种分页方式
第一种:ROW_NUMBER() OVER()方式 select * from ( select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId f ...
- asp.net mvc 的几种分页Pager
第一种 /// <summary> /// 分页Pager显示 /// </summary> /// <param name="html">&l ...
- ASP.NET MVC中有四种过滤器类型
在ASP.NET MVC中有四种过滤器类型
- .NET MVC 学习笔记(四)— 基于Bootstarp自定义弹出框
.NET MVC 学习笔记(四)—— 基于Bootstarp自定义弹出框 转载自:https://www.cnblogs.com/nele/p/5327380.html (function ($) { ...
- Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发
一.标准CRUD使用 对于标准的CRUD功能都有哪些以及MyBatisPlus都提供了哪些方法可以使用呢? 我们先来看张图: 1.1 环境准备 这里用的环境就是Java开发学习(四十)----MyBa ...
随机推荐
- PHP常量总结
概念 常量我们可以理解为值不变的量.常量只要被定义了,在程序脚本的其他任何地方都不能改变. 因为常量被定义后不能被修改,所以即使重定义常量的值,常量的值也是第一次定义常量时的值 常量不管在哪里被定义, ...
- ReactiveX 学习笔记(10)可连接的数据流
Connectable Observable Operators 本文的主题为处理 Connectable Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. R ...
- Extjs实现Grid表格显示【一】
Ext.onReady(function(){ // Ext.Msg.alert("提示","hello world!! "); var stu =new Ex ...
- 17.嵌入ace插件
我们想 在problem-detail上具体显示代码 建一个component 叫 editor 将ace集成上去,算是他的画布吧. 支持各种语言 可以reset 提交写好的代码到server端编译 ...
- 案例:Spark基于用户的协同过滤算法
https://mp.weixin.qq.com/s?__biz=MzA3MDY0NTMxOQ==&mid=2247484291&idx=1&sn=4599b4e31c2190 ...
- tensorflow serving 中 No module named tensorflow_serving.apis,找不到predict_pb2问题
最近在学习tensorflow serving,但是运行官网例子,不使用bazel时,发现运行mnist_client.py的时候出错, 在api文件中也没找到predict_pb2,因此,后面在网上 ...
- 用工厂模式和策略模式优化过多的if-else
多个if-else代码: @RunWith(SpringRunner.class) @SpringBootTest public class EducationalBackgroundTest { p ...
- python教程_1
1.2 不同应用领域的主流操作系统 (1)桌面操作系统 (2)服务器操作系统 (3)嵌入式操作系统 (4)移动设备操作系统 1>.桌面操作系统: Windows系列(微软的.net开发) 用户群 ...
- Gamma Correction
[Gamma Correction] 磁盘上存储的纹理可分为Linear Texture.Gamma Texture. sRGB sampling allows the Unity Editor to ...
- metasploit framework(八):snmp扫描,暴力破解
snmp扫描linux 设置相关参数,这里使用的默认字典,你可以自己制定字典. run 然后使用枚举模块 设置相关参数 run,详细的信息就枚举出来了 snmp扫描windows 先枚举用户 设置目标 ...