什么东西最吸热吸热快散热慢

MvcPager 分页示例 — 标准Url路由分页
Url路由分页
Ajax搜索分页
分页数据相关
Javascrip API
标准Url路由分页
吴起热线微信公众号上线
再到吴起观“绿海”
吴起:从贫困县到全国百强
吴起县铁边城入围全省31个文化旅游名镇
吴起特色养殖成农民致富首选
吴起政府网
&首页&上页&1&&&&&&&&&&&&
@model PagedList&article&
@Html.Partial(&_ArticleTable&, Model)
&div class=&text-right&&
@Html.Pager(Model).Options(o=&o.SetPageIndexParameterName(&id&).SetHorizontalAlign("right").SetPagerItemTemplate(&&{0}&))
_ArticleTable.cshtml:
@model PagedList&Article&
&table class=&table table-bordered table-striped&&
&th class=&nowrap&&序号&/th&
@Html.DisplayNameFor(model =& model.Title)
@Html.DisplayNameFor(model =& model.PubDate)
@Html.DisplayNameFor(model =& model.Author)
@Html.DisplayNameFor(model =& model.Source)
@{ int i = 0;}
@foreach (var item in Model)
&td&@(Model.StartItemIndex + i++)&/td&
@Html.DisplayFor(modelItem =& item.Title)
@Html.DisplayFor(modelItem =& item.PubDate)
@Html.DisplayFor(modelItem =& item.Author)
@Html.DisplayFor(modelItem =& item.Source)
public class Article
[Display(Name=&文章编号&)]
public int ID { }
[Display(Name=&文章标题&)]
[MaxLength(200)]
public string Title { }
[Display(Name = &文章内容&)]
public string Content { }
[Display(Name = &发布日期&)]
public DateTime PubDate { }
[Display(Name = &作者&)]
[MaxLength(20)]
public string Author { }
[Display(Name = &文章来源&)]
[MaxLength(20)]
public string Source { }
Controller:
public ViewResult Basic(int id = 1)
using (var db = new DataContext())
return View(db.Articles.OrderByDescending(a =& a.PubDate).ToPagedList(id, 5));
(C)版权所有: 陕西省延安市吴起县 杨涛(Webdiyer),保留所有权利陕ICP备号 &&未经许可严禁复制、转载及建立镜像站点 Powered by .Net Framework 4.5、、
友情链接:&&ASP.net MVC4自己打造分页Pager实例代码 (数字版,Ajax) - 三岛杰克 - 推酷
ASP.net MVC4自己打造分页Pager实例代码 (数字版,Ajax) - 三岛杰克
.net MVC开发网站真的要写很多javascript
这时就很感谢之前自己待过Java Team,有写过JSP的经验,运用到
.net MVC这边XD
看了一下网路上关于资料分页这块,很多人都分享现成的分页元件解决方案,自己手写打造的范例程式码还满少见
用现成元件好处是功能马上做好
缺点是若要套美工人员设计的版,比较没有弹性
而且万一被客户发现:咦?这个分页样式好像跟当初确认的版型不一样…,就GG了,呵呵
为了避免有网友重蹈我的覆彻,把分页底层的程式码公开,数字Ajax版
下拉选单版(页数都塞进下拉选单里),等有空再补完,不过若会数字版的原理,下拉选单版应该不是问题
我觉得比较困难的是计算切换数字群组部份,有比此篇文章更好公式的话,麻烦请提出,先谢啰~
说明都在注解里
准备Html Table要呈现的资料类别
System.Collections.G
MvcApplicationPager.Models
ProductViewModel
/// &summary&
/// &/summary&
/// &summary&
/// &/summary&
ProductName {
/// &summary&
/// 是否上下架
/// &/summary&
Global.asax.cs塞假资料
MvcApplicationPager.M
System.Collections.G
System.Web.H
System.Web.M
System.Web.R
MvcApplicationPager
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
MvcApplication : System.Web.HttpApplication
//假装这是DB捞出来的资料
List&ProductViewModel& dbList =
List&ProductViewModel&();
Application_Start()
AreaRegistration.RegisterAllAreas();
#region 塞假资料
Random rand =
Random(Guid.NewGuid().GetHashCode());
i = 1; i &= 104; i++)
number = rand.Next(1, 3);
(number == 2)
dbList.Add(
ProductViewModel()
ProductName = Guid.NewGuid().ToString().Substring(0, 5).ToUpper(),
IsOpen = IsOpen
#endregion
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
HomeController.cs
System.Collections.G
System.Web.M
//刚刚宣告的
MvcApplicationPager.M
MvcApplicationPager.Controllers
HomeController : Controller
ActionResult Index()
//上下架的下拉选单的资料清单
&IsOpenItems&
List&SelectListItem&()
SelectListItem(){ Text=
,Selected=
SelectListItem(){ Text=
SelectListItem(){ Text=
IEnumerable&ProductViewModel& result =
.QueryData(10, 0,
FormCollection());
View(result);
/// &summary&
/// 查询资料
/// &/summary&
/// &returns&&/returns&
IEnumerable&ProductViewModel& QueryData(
iPageSize,
iCurrentPageIndex, FormCollection form)
var result = from r
MvcApplication.dbList
.IsNullOrEmpty(form[
&sProductName&
//有输入名称
result = from r
where r.ProductName.Contains(form[
&sProductName&
//有输入上下架
result = from r
where r.IsOpen == Convert.ToBoolean(form[
//部份检视要显示TempData[&pager&]
.pageString(result,iPageSize,iCurrentPageIndex);
//抓DB少量的资料
result = result.Skip(iCurrentPageIndex * iPageSize).Take(iPageSize);
/// &summary&
/// 产生pager字串(这个请再自行抽到其他Utility之类的类别里)
/// &/summary&
/// &param name=&result&&集合物件&/param&
/// &param name=&iPageSize&&每页显示几笔&/param&
/// &param name=&iCurrentPageIndex&&目前的索引页&/param&
/// &returns&&/returns&
pageString(IEnumerable&
iPageSize,
iCurrentPageIndex)
#region Pager处理(文章重点在这!)
iRowTotal = result.Count();
iPageTotal = (iRowTotal / iPageSize);
(iRowTotal % iPageSize & 0)
iPageTotal++;
//目前页数
iCurrentPage = iCurrentPageIndex + 1;
(iCurrentPage & iPageTotal)
iCurrentPage = iPageT
iCurrentPageIndex = iCurrentPage - 1;
(iCurrentPage & 0)
iCurrentPage = 1;
iCurrentPageIndex = 0;
//页数字按钮每5个一组呈现(这边可自行更改)
pNumber = 5;
//页数字按钮共被分为几分
ppSize = iPageTotal / pN
(iPageTotal % pNumber & 0)
//目前在哪一份(从1算起),为了显示「...」
currentPPSize = (iCurrentPageIndex / pNumber) + 1;
//要回传的字串
StringBuilder sb =
StringBuilder();
//第二页以后才有上一页
strPreJS = ((iCurrentPage & 1) ?
&javascript:search('&
+ (iCurrentPage - 1) +
sb.Append(
&&a href=\&&
+ strPreJS +
&\&&← Prev&/a&&
sb.Append(
&&a href=\&javascript:search(1);\&&First&/a&&
//这公式算了我好久...Orz
pStart = ((iCurrentPageIndex / pNumber) * pNumber + 1);
pEnd = pStart + (pNumber - 1);
(pEnd & iPageTotal)
pEnd = iPageT
(currentPPSize & 1)
sb.Append(
&&a href=\&javascript:search('&
+ (pStart - 1) +
&')\&&...&/a&&
//产生页数按钮(从1算起)
i = pS i &= pE i++)
//复制范例时候,class=&highColor&可以删除
sb.Append(
&&a class='&
+(i==iCurrentPage?
&highColor&
&' href=\&javascript:search('&
((currentPPSize & ppSize))
sb.Append(
&&a href=\&javascript:search('&
+ (pEnd + 1) +
&');\&&...&/a&&
//目前页小于最后一页,就有下一页按钮
strNextJS = (iCurrentPage & iPageTotal ?
&javascript:search('&
+ (iCurrentPage + 1) +
sb.Append(
&&a href=\&javascript:search(&
+ iPageTotal +
&);\&&Last&/a&&
sb.Append(
&&a href=\&&
+ strNextJS +
&\&&Next → &/a&&
#endregion
sb.ToString();
/// &summary&
/// Ajax查询资料
/// &/summary&
/// &param name=&iPageSize&&&/param&
/// &param name=&iCurrentPageIndex&&&/param&
/// &returns&&/returns&
[HttpPost]
ActionResult ActionQueryData(FormCollection form)
//这里的int iPageSize, int iCurrentPageIndex参数,前端使用者可能会用F12开发者工具乱改成字串
//怎么防御就请自由料理了...
iPageSize = Convert.ToInt32(form[
&hPageSize&
iCurrentPageIndex = Convert.ToInt32(form[
&hCurrentPageIndex&
IEnumerable&ProductViewModel& result =
.QueryData(iPageSize, iCurrentPageIndex, form);
&HtmlTable&
, result);
View的Index.cshtml
读取中效果有使用到jQuery Block UI
官网:/jquery/block/
&!DOCTYPE html&
&meta name=
&viewport&
&width=device-width&
&title&Index&/title&
&script type=
&text/javascript&
&@Url.Content(&
~/Scripts/jquery-2.0.0.min.js
&&/script&
&script type=
&text/javascript&
&&/script&
&script type=
&text/javascript&
//清除画面上的hidden www.it165.net
function clearHidden() {
&input[name='hPageSize']&
&input[name='hCurrentPageIndex']&
//Ajax查询
function search(pageNumber) {
//要block哪个元素这边自由料理
&form[name='myForm']&
'&h1&读取中...&/h1&'
css: { border:
'3px solid #a00'
//每页显示几笔
var pageSize = $(
&#selectPageSize&
&input[name='hPageSize']&
).val(pageSize);
//目前页索引
&input[name='hCurrentPageIndex']&
).val((pageNumber - 1));
var myForm = $(
&form[name='myForm']&
).serialize();
&@Url.Action(&
ActionQueryData
data: myForm,
success: function (result) {
//先清除上一次的结果
&#divHtmlTable&
).empty();
//更新Html Table
&#divHtmlTable&
).html(result);
//hidden都清掉,避免影响下一次的查询结果
clearHidden();
//解除block UI
&form[name='myForm']&
).unblock();
error: function (xhr) {
//hidden都清掉,避免影响下一次的查询结果
clearHidden();
//显示错误讯息
alert(xhr.responseText);
(Html.BeginForm(
, FormMethod.Post,
@Html.Hidden(
&hPageSize&
@Html.Hidden(
&hCurrentPageIndex&
@*查询输入条件,要放在更新区块外面*@
名称:@Html.TextBox(
&sProductName&
上下架:@Html.DropDownList(
,(IEnumerable&SelectListItem&)ViewData[
&IsOpenItems&
每页显示几笔:@Html.DropDownList(
&selectPageSize&
List&SelectListItem&() {
SelectListItem(){ Text=
,Selected=
SelectListItem(){ Text=
SelectListItem(){ Text=
@*按下搜寻后,到搜寻结果第1页*@
&input type=
&search(1);&
@*要更新的Html Table和Pager
为了Ajax的callback function方便更新画面上的Table,把Table和Pager包成部份检视*@
&divHtmlTable&
@Html.Partial(
&HtmlTable&
部份检视的HtmlTable.cshtml
IEnumerable&
MvcApplicationPager.Models.ProductViewModel
@*复制范例时候,这个css可以删除*@
&text/css&
/*让pager各数字间有空隔*/
#divPager a {
/*目前页数字的背景颜色*/
.highColor
background-color:
cellspacing
cellpadding
@foreach (var item in Model)
&@item.No&/
&@item.ProductName&/
&@item.IsOpen&/
&divPager&
@Html.Raw(TempData[&pager&])
画面弄得很阳春,这样才好套美工人员的设计版型
大概这样,剩下参数的验证检查就再自行补完吧
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致posts - 94,&
comments - 58,&
trackbacks - 0
  在这篇博文中,根据URL中传入的两个参数(页码数,首页、上一页、下一页、末页的标记符)来获得对应的分页数据,
只是传入的参数太多,调用起来不太方便(标记符不能够写错,需要添加新的路由),因此,如果URL只传入页码数就太好,顺着这个思路,有了第三种分页方式。
实现分页形式如下图所示。
  下面说说我的思路吧。
  为了在试图文件中呈现&input type="text" ...& ,我们需要写上代码@Html.TextBox(Asp.net MVC 3语法),为了呈现Lable,需要写@Html.Label,
这里的@Html,有一个管理它的类 HtmlHelper。为了使用方便,我决定对HtmlHelper类进行扩展。
  &考虑到有些页面不需要&上一页&,&下一页&之间的&100001&,因此,决定由两种呈现形式,一个是普通的分页,一个是带数字的分页,只有两种分页模式,新建一个枚举类型PageMode,代码如下
/// &summary&
/// 分页模式
/// &/summary&
public enum PageMode
/// &summary&
/// 普通分页模式
/// &/summary&
/// &summary&
/// 普通分页加数字分页
/// &/summary&
enum PageMode
  面向对象,对象总是很重要的,因此,页面对象是首先需要抽象出来的。
 & 我希望展现的形式是 &总共XX条记录,共XX页,当前第X页 首页 1 2... 上一页 下一页 末页&,想想这段话中,&记录数量&,&共多少页&,&第几页&,还有一条隐形&每页展示数据的大小&,因此,抽象出页面对象PagerInfo(TotalPageCount可以放入这个类中),代码如下。
public class PagerInfo
public int RecordCount { get; set; }
public int CurrentPageIndex { get; set; }
public int PageSize { get; set; }
  第一步,如何扩展HtmlHelper。
  &首先,给大家看看微软如何@Html.Label的代码,看下面的截图
   在研究了这段代码后,就可以写一个普通的HtmlHelper扩展了,代码如下
public static MvcHtmlString Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount, object htmlAttributes, string className, PageMode mode)
TagBuilder builder = new TagBuilder("table");
builder.IdAttributeDotReplacement = "_";
builder.GenerateId(id);
builder.AddCssClass(className);
builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
return builder.ToMvcHtmlString(TagRenderMode.Normal);
  "string id"表示这个控件的id号,&int currentPageIndex&表示需要显示第几页数据的页码,
  &int pageSize"表示每页显示数据的大小,&object htmlAttributes&表示属性, &string className&表示样式属性。
  看了我的HtmlHepler扩展代码,在与微软的原始代码比较以后,会发现我少了一行重要的代码,就是&.();&,即控件在View
的呈现形式。无论是asp.net WebForm页面的服务器控件,还是类似"&input type="text" runat="server"&&控件,或者是asp.net MVC的@Html.Label,
他们在页面的都是以字符串的形式展现。
  有了这个思路,写出普通的分页形式就比较简单了。
  我们只需要给TagBuilder给予正确的字符串就行了。
  1、首先获得总的记录数,总页数
    总记录数&int pageCount =Convert.ToInt32(Math.Ceiling((double)RecordCount / (double)PageSize));//获得总页数
&  2、普通分页如何实现
   假设我们的url形式为 &http://localhost:11507/Home/FY3?page=2&,那么下一页的url形式便是&http://localhost:11507/Home/FY3?page=3&,因此,我们需要得到传来的绝对路径,不含任何参数。然后根据传来的当前页码数,判断是否有下一页,上一页,并且得到格式化后的url。
   这里我先理一理页码数如何传入HtmlHelper中的。
  &首先,Controller从URL中获取CurrentPageIndex,然后放入PageInfo对象,并且获得分页数据(InfoSource);
   然后,我们将InfoSource与PageInfo两个对象放入一个泛型容器PagerQuery&T&,返回给View;
   最后,HtmlHelper根据View页面中的对象获得所需参数。
&&&&& 现在回到HtmlHelper的扩展实现。
  获得我们需要ULR格式化字符串,如下代码。
  var url=new StringBuilder();
  url.Append(HttpContext.Current.Request.Url.AbsolutePath+"?page={0}");
  我希望展现的形式是 &总共XX条记录,共XX页,当前第X页 首页 上一页 下一页 末页&。现在开始拼字符串。
   var sb=new StringBuilder();
   sb.Append("&tr&&td&");
   sb.AppendFormat("总共{0}条记录,共{1}页,当前第{2}页&&",RecordCount,pageCount,currentPageIndex);
  //RecordCount,currentPageIndex 值通过PagerInfo传递过来
  if(currentPageIndex==1{
    sb.Append("&span&首页&/span&&";)&& //如果第一页 不需要给首页真实的链接  }
    var url1=string.Format(url.ToString(),1);& //格式化URL 得到第一页的url &&&http://localhost:11507/Home/FY3?page=1&
    sb.AppendFormat("&span&&a href={0} 首页&/a&&/span&&",url1);
  如何类推,可得到上一页、下一页、末页的链接。
    那么,如果上一页与下一页需要显示数字,怎么办呢? 这里,默认显示10个数字(如果页数不够,就按实际页数显示)
private static string GetNumericPage(int currentPageIndex, int pageSize, int recordCount, int pageCount, string url)
var k = currentPageIndex / 10;
var m = currentPageIndex % 10;
var sb = new StringBuilder();
if (currentPageIndex / 10 == pageCount / 10)//10个号码 为一组
if (m == 0)
m = pageCount % 10;
for (var i = k * 10 + 1; i &= k * 10 + i++)//如果是第1页 则 1...10 第11页,则11...20
//for(int i=currentPageIi&LastPi++)
if (i == currentPageIndex)
sb.AppendFormat("&span&&font color=red&&b&{0}&/b&&/font&&/span&&", i);
var url1 = string.Format(url, i);
sb.AppendFormat("&span&&a href={0}&{1}&/a&&/span&&", url1, i);
return sb.ToString();
string GetNumericPage
    现在,可以得到扩展标签代码,如下
public static MvcHtmlString Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount, object htmlAttributes, string className, PageMode mode)
TagBuilder builder = new TagBuilder("table");
builder.IdAttributeDotReplacement = "_";
builder.GenerateId(id);
builder.AddCssClass(className);
builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
builder.InnerHtml = GetNormalPage(currentPageIndex, pageSize, recordCount, mode);
return builder.ToMvcHtmlString(TagRenderMode.Normal);
static MvcHtmlString ToMvcHtmlString(this TagBuilder tagBuilder, TagRenderMode renderMode)
return new MvcHtmlString(tagBuilder.ToString(renderMode));
    得到分页字符串代码了,如下
private static string GetNormalPage(int currentPageIndex, int PageSize, int RecordCount, PageMode mode)
int pageCount =Convert.ToInt32(Math.Ceiling((double)RecordCount / (double)PageSize));//获得总页数
var url = new StringBuilder();
url.Append(HttpContext.Current.Request.Url.AbsolutePath + "?page={0}");
var sb = new StringBuilder();
sb.Append("&tr&&td&");
sb.AppendFormat("总共{0}条记录,共{1}页,当前第{2}页&&", RecordCount, pageCount, currentPageIndex);
if (currentPageIndex == 1)
sb.Append("&span&首页&/span&&");
var url1 = string.Format(url.ToString(), 1);
sb.AppendFormat("&span&&a href={0}&首页&/a&&/span&&", url1);
if (currentPageIndex & 1)
var url1 = string.Format(url.ToString(), currentPageIndex - 1);
sb.AppendFormat("&span&&a href={0}&上一页&/a&&/span&&", url1);
sb.Append("&span&上一页&/span&&");
if (mode == PageMode.Numeric)
sb.Append(GetNumericPage(currentPageIndex, PageSize, RecordCount, pageCount, url.ToString()));
if (currentPageIndex & pageCount)
string url1 = string.Format(url.ToString(), currentPageIndex + 1);
sb.AppendFormat("&span&&a href={0}&下一页&/a&&/span&&", url1);
sb.Append("&span&下一页&/span&&");
if (currentPageIndex == pageCount)
sb.Append("&span&末页&/span&&");
string url1 = string.Format(url.ToString(), pageCount);
sb.AppendFormat("&span&&a href={0}&末页&/a&&/span&&", url1);
return sb.ToString();
GetNormalPage(int currentPageIndex, int PageSize, int RecordCount, PageMode mode)
   那么,承载数据的容器时什么呢,因为Model是会随时变化的(泛型类最佳实现),代码如下
public class PagerQuery&T& : List&T&
public PagerQuery(PagerInfo pager, IEnumerable&T& source)
this.Pager =
int BeforePageIndex = pager.CurrentPageIndex - 1;
if (BeforePageIndex & 0)
BeforePageIndex = 1;
var entityList = source.Skip((BeforePageIndex) * pager.PageSize).Take(pager.PageSize);
AddRange(entityList);
public PagerInfo Pager { get; set; }
   Controller代码如下
public ActionResult FY2(int? page)
LZSEntities _lzsDb=new LZSEntities();
PagerInfo pager = new PagerInfo();
pager.RecordCount = _lzsDb.MyTestPages.Count();
pager.PageSize = 5;
if (page == null)
pager.CurrentPageIndex = 1;
pager.CurrentPageIndex = Convert.ToInt32(page);
var result = _lzsDb.MyTestP
IEnumerable&MyTestPages& info2 =
var query = new PagerQuery&MyTestPages&(pager, info2);
return View(query);
public ActionResult FY2(int? page)
   View代码如下
@model MVCFY2.PageHelpers.PagerQuery&MVCFY2.Models.MyTestPages&
@using MVCFY2.Models
@using MVCFY2.PageH
Layout = null;
&!DOCTYPE html&
&title&FY3&/title&
@* ReSharper disable once Html.Obsolete *@
&table cellpadding="0" cellspacing="0" height="200px" width="300px" bordercolor="blue"&
&th height="30px"&
@foreach (var item in Model)
&td align="center" height="30px"&
&p& @Html.Pager("pager1", Model.Pager.CurrentPageIndex, Model.Pager.PageSize, Model.Pager.RecordCount, PageMode.Numeric)&/p&
& VS 2010 MVC3,配置好数据库后,运行即可,源代码。
  我感觉,第三种分页形式是很完美的,只是重复从第一页跳到最后一页再最后一页跳至第一页,分页缓慢,查看资源管理器,内存被占了很多,未曾释放,因此,
希望各位可以告诉我高效的改进方法~~~
阅读(...) 评论()6111人阅读
C# MVC4 or MVC5
[模块](87)
[模块](125)
因为是转载文章 在此标明出处,以前有文章是转的没标明的请谅解,因为有些已经无法找到出处,或者与其它原因。
如有冒犯请联系本人,或删除,或标明出处。
因为好的文章,以前只想收藏,但连接有时候会失效,所以现在碰到好的直接转到自己这里。
================================================================================
客户端相关属性配置:
pagination & & boolean 默认false &显示一个分页工具栏: true/false
pagePosition &string &默认bottom 分页工具栏的位置: &'top','bottom','both' (下图就是在底部)
pageNumber &number &默认1 & & &页码:第1页、第2页(直观一点就是下图中,第二个红色框起来的页码)
pageSize & & & &&number &默认10 & & 每页的记录数 (下图第一个红色框起来的每页记录数)
pageList & & & & &array & 默认[10,20,30,40,50] 提供给用户可选择的每页显示记录数 (下图中第三个红色框起来的下拉列表)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1030383次
积分:11939
积分:11939
排名:第999名
原创:245篇
转载:88篇
译文:27篇
评论:148条
(5)(3)(6)(11)(10)(8)(3)(2)(6)(1)(1)(2)(4)(6)(4)(4)(1)(3)(1)(3)(4)(4)(2)(2)(4)(3)(11)(9)(22)(15)(28)(36)(3)(1)(6)(7)(2)(19)(8)(22)(14)(22)(16)(13)  在开始做mysql分页功能组件前,便设定的是要有一定可复用性。先在项目里Views文件夹下右键新建名为_PaginationComponent.cshtml,这里html及css我采用的bootstrap分页组件,这可以参考/components/。
  先将生成项目效果截图呈上:
  这里有需要预先知道的,是mysql分页查询与mssql分页查询实现不同点在于,mysql支持limit语句,limit格式为 limit pageIndex*pageSize,pageSize,pageIndex--为页数,pageSize--为页面包含数据量。limit具体用法可查询mysql手册。然后需要预先定义好pageSize,pageIndex,pageCount(分页总数)三个量。这里预设pageSize为30,即: int&pageSize = 30。
  首先来实现获取pageCount:思路是,先将要获取的所有数据集从数据库中取出,根据pageSize = 30得出总页数,这里会遇到数据集数量为30的倍数与否问题,解决是:
MySqlCommand comm_1 = new MySqlCommand(sqlSearch, connection);
MySqlDataAdapter da_1 = new MySqlDataAdapter(sqlSearch, connection);
da_1.SelectCommand = comm_1; //初始化da.fill的命令
DataSet set_1 = new DataSet();
da_1.Fill(set_1);
DataTable dt_1 = set_1.Tables[0]; //使用datatable装所得多张表数据,并获取里面的第一张表
Count = (double)(dt_1.Rows.Count) / 30;//分页总页数
if (Count & (int)(dt_1.Rows.Count) / 30)
pageCount = (dt_1.Rows.Count) / 30 + 1;
else if (Count == (dt_1.Rows.Count) / 30)
pageCount = (dt_1.Rows.Count) / 30;
else if (Count & (int)(dt_1.Rows.Count) / 30)
pageCount = 1;
这里用到判断,大于30的pageCount均往上加1,小于30的pageCount为1。
接下来要实现的是用pageIndex传页数获取对应的数据集,思路是利用limit语句特性:
public List&Model& GetDormitoryBottleRecycleListPagination(int pageIndex, int pageSize)
Get_Connection();
List&Model& list = null;string sqlPaginatioSearch = "SELECT * FROM table ORDER BY file_1 ASC LIMIT " + (pageIndex - 1) * 30 + "," + pageSize + "";
//填充分页后的数据
MySqlCommand comm_2 = new MySqlCommand(sqlPaginatioSearch, connection);
MySqlDataAdapter da_2 = new MySqlDataAdapter(sqlPaginatioSearch, connection);
da_2.SelectCommand = comm_2; //初始化da.fill的命令
DataSet set_2 = new DataSet();
da_2.Fill(set_2);
DataTable dt_2 = set_2.Tables[0]; //使用datatable装所得多张表数据,并获取里面的第一张表
if (dt_2 != null && dt_2.Rows.Count & 0)
list = new List&Model&();
foreach (DataRow row in dt_2.Rows)
Model entity = sqlhelper.CreateItem(row);
list.Add(entity);
Close_Connection();
string sqlPaginatioSearch = "SELECT * FROM table ORDER BY file_1 ASC LIMIT " + (pageIndex - 1) * 30 + "," + pageSize + ""; //填充分页后的数据这是核心sql语句,通过pageIndex传入页面数,从(pageIndex - 1) * 30处开始取pageSize量的数据。在控制器的action中实现也是关键:
public ActionResult DormitoryBottleRecycleSort(int id = 1)
int pageIndex =//传递分页数
int pageSize = 30;
int pageCount = 0;
List&BottleRecycleModel& list_1;
list_1 = pbsAccess.GetDormitoryBottleRecycleListPagination(pageIndex, pageSize, pageCount);//获取分页列表
ViewBag.ListCount = list_1.C
BottleRecycleList viewBottleRecycleList = new BottleRecycleList();
viewBottleRecycleList.bottleRecycleList = new List&BottleRecycleModel&();//要实例化对象,相当重要        //这里是为显示分页数据的功能代码
if (list_1 != null)
foreach (var item in list_1)
BottleRecycleModel viewBottleRecycle = new BottleRecycleModel();
viewBottleRecycle.Id = item.Id;
viewBottleRecycle.DormitoryNumber = item.DormitoryN
viewBottleRecycle.SmallBottleNumber = item.SmallBottleN
viewBottleRecycle.BigBottleNumber = item.BigBottleN
viewBottleRecycle.TotalBottleNumber = item.TotalBottleN
viewBottleRecycle.PublishTime = item.PublishT
viewBottleRecycleList.bottleRecycleList.Add(viewBottleRecycle);
ViewBag.DormitoryBottleRecycleSort = viewBottleRecycleList.bottleRecycleL
ViewBag.DormitoryBottleRecycleSort = null;
ViewBag.pageCount = pbsAccess.getDormitoryBottlePaginationPageCount();
ViewBag.pageIndex = pageI
return View(ViewBag);
  这里使用ViewBag进行传值,这里的getDormitoryBottlePaginationPageCount()就是上面pageCount得出的方法。这是后台的方法。
  现在说一下_PaginationComponent.cshtml里该如何运用这些值。
string Controllers = ViewContext.RouteData.Values["controller"].ToString();
string Actions = ViewContext.RouteData.Values["Action"].ToString();
&li&&a href="#"&&&/a&&/li&
@for (int i = 1; i & @ViewBag.pageCount + 1; i++)
&li&&a href="/@Controllers/@Actions/@i"&@i&/a&&/li&
&li&&a href="#"&&&/a&&/li&
  为了进行组件复用,采用ViewContext.RouteData.Values["controller"].ToString()方法,这样,在其他页面里引用组件时,可以轻易移植过去如:&a href="/@Controllers/@Actions/@i"&@i&/a&,当然,实用for循环是为了显示出更多的页数,诸如1、2、3、4等等,这里我的数据比较少,因此只显示一页,当然还有其他功能诸如省略过多页数为省略号和当前页禁用等等,需要js其他代码来实现,这里只为了实现一个简单的分页组件功能。
  这个页面里的代码并非全部分页的源码,这里只提供我个人解决时思路,如果有错误,还请指正,必定虚心求教。转载请注明来源与出处,谢谢合作 By&
阅读(...) 评论()}

我要回帖

更多关于 什么东西最吸热 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信