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 ...
随机推荐
- Delphi 集合和字符串互转
集合和字符串互转 集合: type TSocketState = (ssDisconnecting, ssDisconnected, ssConnected, ssConnecting, s ...
- Java读写avro例子
一.avro是一个数据序列化框架,可以高效得进行序列化和反序列化,支持C, C++, C#, Java, PHP, Python, 和Ruby语言.现在使用Java来读写. 二.环境搭建 1.下载av ...
- Linux命令:unzip
语法: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir] 默认行为将zip文件中的内容全部解压缩到当前目录下. ...
- html页面调用servlet中文乱码问题
1.需要在html中:<meta charset=utf-8" /> 2.在servlet的doPost方法中 首先:response.setContentType(" ...
- vue项目插入视频-mp4
1. v.vue文件: <template> <div> <div class="contain"> <my-video :sources ...
- [福大2018高级软工教学]团队Beta阶段成绩汇总
一.作业地址: https://edu.cnblogs.com/campus/fzu/AdvancedSoftwareEngineerning2018/homework/2465 二.Beta阶段作业 ...
- 用adb取出在手机中安装的apk
第一步:列出所有安装的apk adb shell pm list packages 然后找到自己要取出来的apk的包名. 第二布:找到apk的位置(后面跟上包名) adb shell pm path ...
- C++ 设置透明背景图片
背景: 有两个图片,一个是目标背景图片, 一个是带有自身背景色彩的彩色图片 先将这彩色图片绘制到目标背景图片中, 这一步通过BITBLT就可实现. 但实 ...
- springboot 集成dubbo
- 过滤access日志前5条数据
cat /usr/local/nginx/logs/access.log|awk '{print $1}'|sort|uniq -c|sort -n -r|head -5 找不到的话可以find查找a ...