这里,我使用的是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. 盒子变形-盒子加padding后 变形问题,

    1. box-sizing: content-box: 影响: 加了内外边距后整个盒子的大小同步改变 2.box-sizing: border-box;影响:加了边距后整个盒子大小不受影响 boots ...

  2. Servlet基本_Httpリクエスト、レスポンス

    1.リクエスト リクエストは.リクエストライン.メッセージヘッダ.改行.メッセージボディで組まれる. 主なリクエストヘッダは. Accept クライアントが利用可能なデータメディアタイプを指定. Ac ...

  3. Indy 10.5.8 for Delphi and Lazarus 修改版(2011)

    Indy 10.5.8 for Delphi and Lazarus 修改版(2011)    Internet Direct(Indy)是一组开放源代码的Internet组件,涵盖了几乎所有流行的I ...

  4. AWK 知识库

    awk 极客课程 <AWK 编程语言>1 <AWK 编程语言>2 <AWK程序设计语言>https://github.com/wuzhouhui/awk http: ...

  5. php压力测试工具简单实用方法

    命令 ab -h 指令帮助 ab -n100 -c10 http://www.baidu.com 发起100个请求 并发数为10 设置测试地址是百度,注意测试测试时候请求数和并发数尽量设置低一点 Re ...

  6. python学习笔记之斐波拉契数列学习

    著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 如果用Python的列表生成式, ...

  7. 434. Number of Segments in a String

    原题: 434. Number of Segments in a String 解题: 刚看到题目时,觉得可以通过统计空格个数,但想想有可能会有多个空格的情况 思路: 一:遍历字符,if条件碰到非空格 ...

  8. C# 指定平台编译项目

    如CefSharp就需要指定平台,项目为Any CPU时,无法编译,总会提示出错. 如: CefSharp.Common contains unmanaged resoures, set your p ...

  9. hdu4497-GCD and LCM-(欧拉筛+唯一分解定理+组合数)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  10. web.xml中<security-constraint>和四种认证类型

    https://blog.csdn.net/lisheng19870305/article/details/40819481 sztc开发中http请求一直发送后无响应,通过soapui定位异常信息为 ...