2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > ASP.NET MVC分页实现

ASP.NET MVC分页实现

时间:2021-10-18 00:49:40

相关推荐

ASP.NET MVC分页实现

MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FORM中,当然以后我会考虑实现基于URL分页的!

一、PageInfo类

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace ROIS.Models 7 { 8/// <summary> 9/// 分页信息 10/// </summary> 11public class PageInfo 12{ 13 private int _RecordCount = 0; 14 private int _PageSize = 10; 15 private int _CurrentPageNo=1; 16 17 /// <summary> 18 /// 获取或设置记录总数 19 /// </summary> 20 public int RecordCount 21 { 22 get 23 { 24 return _RecordCount; 25 } 26 set 27 { 28 if (value > 0) 29 { 30 _RecordCount = value; 31 } 32 } 33 } 34 35 /// <summary> 36 /// 获取或设置每页记录数 37 /// </summary> 38 public int PageSize 39 { 40 get { 41 return _PageSize; 42 } 43 set { 44 if (value > 0) 45 { 46 _PageSize = value; 47 } 48 } 49 } 50 51 /// <summary> 52 /// 获取或设置当前索引页码(从1开始计算) 53 /// </summary> 54 public int CurrentPageNo 55 { 56 get { 57 return _CurrentPageNo; 58 } 59 60 set { 61 if (value > 0) 62 { 63 if (value > this.PageCount) 64 { 65_CurrentPageNo = this.PageCount; 66 } 67 else 68 { 69_CurrentPageNo = value; 70 } 71 } 72 } 73 } 74 75 /// <summary> 76 /// 获取总页数 77 /// </summary> 78 public int PageCount 79 { 80 get 81 { 82 if (this.RecordCount <= 0) 83 { 84 return 1; 85 } 86 87 return this.RecordCount / this.PageSize + (this.RecordCount % this.PageSize > 0 ? 1 : 0); 88 } 89 } 90 91 public PageInfo() 92 { } 93 94 public PageInfo(int recordCount, int currentPageNo, int pageSize = 10) 95 { 96 this.RecordCount = recordCount; 97 this.PageSize = pageSize; 98 this.CurrentPageNo = currentPageNo; 99 }100 101 102 /// <summary>103 /// 是否为首页104 /// </summary>105 /// <returns></returns>106 public bool IsFirstPage()107 {108 return (this.CurrentPageNo <= 1);109 }110 111 112 /// <summary>113 /// 是否为末页114 /// </summary>115 /// <returns></returns>116 public bool IsLastPage()117 {118 return (this.CurrentPageNo>=this.PageCount);119 }120 121}122 }123

二、_Pager局部视图(建议放在Shared目录下)

@using ROIS.Models;@model PageInfo@if (Model!=null && Model.RecordCount > 0){ <div class="pager">第@(Model.CurrentPageNo) 页&nbsp;/&nbsp;共@(@Model.PageCount)页,@if (Model.IsFirstPage()){<span>|&lt;首&nbsp;&nbsp;页</span><span>&lt;上一页</span>}else{<a href="javascript:turnPage(1);">|&lt;首&nbsp;&nbsp;页</a><a href="javascript:turnPage(@(Model.CurrentPageNo-1));">&lt;上一页</a>}@if (Model.IsLastPage()){<span>下一页&gt;</span><span>末&nbsp;&nbsp;页&gt;|</span>}else{<a href="javascript:turnPage(@(Model.CurrentPageNo+1));">下一页&gt;</a><a href="javascript:turnPage(@Model.PageCount);">末&nbsp;&nbsp;页&gt;|</a>}转到:<select id="pages" οnchange="javascript:turnPage(this.value);">@for (int i = 1; i <= Model.PageCount; i++){if (Model.CurrentPageNo == i){<option value="@i" selected="selected">第@(i)页</option>}else{<option value="@i">第@(i)页</option>}}</select><input type="hidden" id="_pageno" name="_pageno" /></div><script type="text/javascript"><!--function turnPage(pageNo) {var oPageNo = document.getElementById("_pageno");oPageNo.value = pageNo;oPageNo.form.submit();}function getForm(obj) { //这个没有用到,但可以取代上面的oPageNo.formif (obj.parentNode.nodeName.toLowerCase() == "form") {return obj.parentNode;} else {getForm(obj.parentNode);}}//--></script>}

三、使用方法:

后台Controller的Action中加入:

string pageNo = Request.Form["_pageno"];

int iPageNo = 1;

int.TryParse(pageNo, out iPageNo);

PageInfo pageInfo=newPageInfo(5000,iPageNo, 20);

ViewBag.PageInfo = pageInfo;

前台VIEW页面代码如下:(注:ROIS是我专案名称,依实际情况更换)

@using (Html.BeginForm())

{

这里面是数据列表HTML代码

@Html.Partial("_Pager", ViewBag.PageInfo as ROIS.Models.PageInfo)

}

原文出自我的个人网站:/post//08/26/24.html

本文转自 梦在旅途 博客园博客,原文链接:/zuowj/p/3937041.html,如需转载请自行联系原作者

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。