MVC 翻頁的那些坑
思绪良久,最后还是决定记录一下遇到的坑,毕竟被 ‘折磨’ 了三天,关于分页,这个话题,我一开始时拒绝的,因为真正接触项目的时候,才发现每个框架都会封装一套自己的分页,毕竟相同风格的项目是不常见的,而在学校书本上讲的那套 web form分页的那套说辞也out 了,学校接触的MVC 不多,现在项目赶上,就来谈谈分页的坑。一般如果自己写底层分页的话,无非就是,几个辅助类,然后一个Pager的扩展类,再自己封装下样式,如果不熟悉的话,比如说我,还是用网上开源的吧
EF 误区
1. 一直以来,自己的无知,以为用EF的Code first思想 来自动生成数据库,数据表,实在是太繁琐,自己也就写过一两个测试表玩玩,要是真正开发的时候,如果不是深入了解过EF的话,实在是费劲。然而,EF是分情况的,至少我是这么认为,有表或者无表。当数据库已经存在的时候,仍然可以使用EF
2. 当存在数据表的时候,以往只知道创建数据库实体类,然后生成一大堆东西(t4模板),如果不这样话,自己手写规则,这样一来,不了解规则的话写起来同样比较费劲,然而,可以使用CodeFirst来直接生成实体类,
这样下来,对比左边和右边就显得简洁多了,看起来也清爽
(注:如果不是最新的实体框架,输入命令 Install-Package EntityFramework)
3. 总以为凡是用了实体类就 等于一下子把数据全部查询出来,对于千万级的数据,用EF来做翻页,效率低的很。殊不知,EF实体是映射到数据库中,并没有做全部查询,创建实体对象之后,Lambda是做延迟加载的,当使用Tolist() 方法之后,才算是在查询数据库
抛去以上错误观点之后,当调用开源的分页插件的Topagelist(pageindex,pagesize)方法时,实际上的效率并不比 sql(存储过程) 访问数据慢多少,另外Linq的 Skip() 和Take() 方法同样也可以起到分页的效果。 对于ADO.NET 访问数据来说,一般思路是:
public ActionResult SqlList(int ? id =)
{
int pageindex = id??;
int pagesize = ;
SqlConnection con = new SqlConnection(connectionString);
SqlDataAdapter sda = new SqlDataAdapter(@"select * from (select *,ROW_NUMBER() OVER(ORDER BY BookID) number from Books) as b where b.number between " + (pageindex - ) * pagesize + + " and " + pageindex * pagesize + " ", con);
DataSet ds = new DataSet();
sda.Fill(ds);
List<Book> book = DataSetToList<Book>(ds.Tables[]).ToList();
PagedList<Models.Book> bookpager = book.AsEnumerable().ToPagedList(pageindex,pagesize);
return View(bookpager);
}
以上代码可以看出,先得到每页的查询结果,然后 反射成List<T> 对象,此处省略反射的公有方法1000行。。。
如果使用的是EF的话,那么代码如下,可见是如此的简洁明了
public ActionResult Index(int id = 1)
{
DBmodel db = new DBmodel();
return View(db.Books.AsEnumerable().OrderBy(a=>a.BookId).ToPagedList(id,));
}
对于分页前台的实现
EasyUI
Bootstrap
Jquery、Ajax
自己封装一套也可以,毕竟翻页的风格是跟着项目界面的风格走的,比如说我当前的项目,就是纯手写前台JS,关于翻页,终究也就是这么回事,主要就是有时候没有明白一个知识点,或者存在误解的时候,真真是只有自己心里明白,问别人,提问,总感觉无法清楚的表述自己的问题,导致一时会卡很久,有些东西时间、经历没到,真是无法理解,好多点也都是毕业后,才潜移默化的理解了不少以前硬背也没死记住的知识。同样,这这里,要感谢那些积极回答我博问的园友。
---时间煮雨,雨落前堂
MVC 翻頁的那些坑的更多相关文章
- spring mvc mybatis集成踩的坑
开园这么多年了也没写几篇文章,现在想想光看别人的也不行啊,咱也自己写写,就写这天我我在做spring mvc与mybatis的集成时遇到的问题 1 spring与mybatis的集成 这个相信大家都弄 ...
- 从content-type设置看Spring MVC处理header的一个坑
我们经常需要在HttpResponse中设置一些headers,我们使用Spring MVC框架的时候我们如何给Response设置Header呢? Sooooooooooooo easy, 看下面的 ...
- 基于maven来Spring MVC的环境搭建遇到“坑”
1.注解配置路径问题: 在web.xml中配置spring mvc 路径时, 应该配置如下:classpath:classpath:spring-* 2.jdk版本和Spring MVC版本不一致问题 ...
- 记那些年在asp.net mvc上挖过的坑
表现: IDE是vs2017.是在 A 控制器方法断点后,却怎么也运行不到那个位置,但是又正常返回页面.该方法位于web项目引用的控制器类库上的一个控制器,试过它隔壁的控制器,一切正常. 但每次访问该 ...
- MVC 為頁面的list資料重新命名
function ReBookFileName() { $("#div_sortable").find("li[ ...
- [HeadFirst-JSPServlet学习笔记][第三章:实战MVC]
第三章 实战MVC J2EE如何集成一切 Java2企业版(Java 2 Enterprise Editon,J2EE)是一种超级规范.规定了servlets2.4,JSP2.0,EJB2.1(Ent ...
- .NET MVC 4 实现用户注册功能
初学MVC,踩了不少坑,所以通过实现一个用户注册功能把近段时间学习到的知识梳理一遍,方便以后改进和查阅. 问题清单: l 为什么EF自动生成的表名后自动添加了s? l 如何为数据库初始化一些数据? l ...
- java Future 模式
考慮這樣一個情況,使用者可能快速翻頁瀏覽文件中,而圖片檔案很大,如此在瀏覽到有圖片的頁數時,就會導致圖片的載入,因而造成使用者瀏覽文件時會有停頓 的現象,所以我們希望在文件開啟之後,仍有一個背景作業持 ...
- 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】
因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...
随机推荐
- 根据Request获取客户端IP
转自: http://www.cnblogs.com/icerainsoft/p/3584532.html http://www.cnblogs.com/bingya/articles/3134227 ...
- AT2046 Namori 图论
正解: 解题报告: 传送门! 首先看数据范围可以发现要么是棵树要么是个奇环要么是个偶环 然后就分类讨论分别看下这几个情况 首先是棵树的 首先可以想到树的情况就是个二分图,所以不妨把颜色重定义,让奇数层 ...
- fiddler 实现代理的操作
- python+rabbitMQ实现生产者和消费者模式
(一)安装一个消息中间件,如:rabbitMQ (二)生产者 sendmq.py import pika import sys import time # 远程rabbitmq服务的配置信息 user ...
- python文件的md5加密方法
本文实例讲述了python文件的md5加密方法.分享给大家供大家参考,具体如下: 一.简单模式: from hashlib import md5 def md5_file(name): m = md5 ...
- 前端ps部分
一. 使用ps前的一些设置工作 1.首选项的设置 编剧-首选项-单位与标尺-[标尺/文字]改为像素 2.面板的设置 窗口--仅保留常用的[F7图层].[F8信息].[历史记录]. 3.视图的设置 视图 ...
- 使用jframe编写一个base64加密解密工具
该工具可以使用exe4j来打包成exe工具(如何打包自己百度) 先上截图功能 运行main方法后,会弹出如下窗口 输入密文 然后点击解密,在点格式化 代码分享 package tools;import ...
- spring boot 启动类一定要放置到包的根目录下,也就是和所有包含java文件的包在同一级目录。如果不放置在根目录下,将会提示 no mybatis mapper was found
spring boot 启动类一定要放置到包的根目录下,也就是和所有包含java文件的包在同一级目录.将会将同一目录下的包扫描成bean. 如果不放置在根目录下,将会提示 no mybatis map ...
- Openresty 安装第三方插件
Openresty 安装第三方插件 程序媛没有夜生活 2016.08.02 15:33* 字数 167 阅读 1283评论 0喜欢 2 在安装之前,我们先来看一下我们现有的模块. 1.将需要安装的插件 ...
- Lua获取当前时间
更多好的文章就在 blog.haoitsoft.com,请大家多多支持! local getTime = os.date(“%c”); 其中的%c可以是以下的一种:(注意大小写) %a abbrevi ...