ASP.NET MVC 分页之HtmlHelper
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Security.Cryptography.X509Certificates;
- using System.Web;
- namespace MvcAppPager.Models
- {
- public interface IPageOfList
- {
- long CurrentStart { get; }
- int PageIndex { get; set; }
- int PageSize { get; set; }
- int PageTotal { get; }
- long RecordTotal { get; set; }
- }
- public interface IPageOfList<T> : IPageOfList, IList<T>
- {
- }
- public class PageOfList<T>:List<T>,IList<T>,IPageOfList,IPageOfList<T>
- {
- public PageOfList(IEnumerable<T> items, int pageIndex, int pageSize, long recordTotal)
- {
- if (items!=null)
- AddRange(items);
- PageIndex = pageIndex;
- PageSize = pageSize;
- RecordTotal = recordTotal;
- }
- public PageOfList(int pageSize)
- {
- if (pageSize <= 0)
- {
- throw new ArgumentException("页面数据量必须大于0", "页面数据量");
- }
- }
- public int PageIndex { get; set; }
- public int PageSize { get; set; }
- public int PageTotal
- {
- get
- {
- //RecordTotal / PageSize 获取能够被布满的页面数,(RecordTotal % PageSize > 0 ? 1 : 0)判断是否有未布满的页面。
- return (int)RecordTotal / PageSize + (RecordTotal % PageSize > 0 ? 1 : 0);
- }
- }
- public long RecordTotal { get; set; }
- /// <summary>
- /// 当前页面的记录开始位置
- /// </summary>
- public long CurrentStart
- {
- get { return PageIndex * PageSize + 1; }
- }
- /// <summary>
- /// 当前页面的结束位置
- /// </summary>
- public long CurrentEnd
- {
- get { return (PageIndex + 1) * PageSize > RecordTotal ? RecordTotal : (PageIndex + 1) * PageSize; }
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- namespace MvcAppPager.Models
- {
- public class Order
- {
- public int ID { get; set; }
- public string OrderNo { get; set; }
- public decimal WayFee { get; set; }
- public string EMS { get; set; }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using MvcAppPager.Models;
- namespace MvcAppPager.Controllers
- {
- public class HomeController : Controller
- {
- List<Order> list=new List<Order>
- {
- new Order{ID=1,OrderNo="2016050501",WayFee = 20,EMS = "C01111"},
- new Order{ID=2,OrderNo="2016050502",WayFee = 20,EMS = "C01112"},
- new Order{ID=3,OrderNo="2016050503",WayFee = 20,EMS = "C01113"},
- new Order{ID=4,OrderNo="2016050504",WayFee = 20,EMS = "C01114"},
- new Order{ID=5,OrderNo="2016050505",WayFee = 20,EMS = "C01115"},
- new Order{ID=6,OrderNo="2016050506",WayFee = 20,EMS = "C01116"},
- };
- private const int PageSize = 2;
- private int counts;
- //
- // GET: /Home/
- public ActionResult Index(int pageIndex=0)
- {
- counts = list.Count;
- list = list.Skip(PageSize * pageIndex).Take(PageSize).ToList();
- PageOfList<Order> _ordersList=new PageOfList<Order>(list,pageIndex,PageSize,counts);
- return View(_ordersList);
- }
- }
- }
- using System.Text;
- using System.Web.Mvc;
- using System.Web.Mvc.Html;
- namespace MvcAppPager.Models
- {
- public static class ExtHelper
- {
- public static MvcHtmlString UIPaging(this HtmlHelper helper,IPageOfList list)
- {
- StringBuilder sb=new StringBuilder();
- if (list == null)
- {
- return new MvcHtmlString(sb.ToString());
- }
- //显示记录条数和每页有多少条记录
- sb.AppendLine("<div class=\"fenye\">"+string.Format("<span>共{0}条记录,每页{1}条 </span>",list.RecordTotal,list.PageSize));
- System.Web.Routing.RouteValueDictionary route = new System.Web.Routing.RouteValueDictionary();
- //获取路由字典中的控制器【controller】和【action】
- foreach (var key in helper.ViewContext.RouteData.Values.Keys)
- {
- route[key] = helper.ViewContext.RouteData.Values[key];
- }
- //获取请求信息
- foreach (string key in helper.ViewContext.RequestContext.HttpContext.Request.QueryString)
- {
- route[key] = helper.ViewContext.RequestContext.HttpContext.Request.QueryString[key];
- }
- if (list.PageIndex <= 0)
- {
- sb.AppendLine("<a class=\"backpage\" href=\"javascript:void(0);\">上一页</a>");
- }
- else
- {
- route["pageIndex"] = list.PageIndex - 1;
- sb.AppendLine(helper.ActionLink("上一页",route["action"].ToString(),route).ToHtmlString());
- }
- if (list.PageIndex>3)
- {
- route["pageIndex"] = 0;
- sb.AppendLine(helper.ActionLink(@"<b>1</b>", route["action"].ToString(), route).ToHtmlString().Replace("<", "<").Replace(">", ">"));
- if (list.PageIndex>=5)
- {
- sb.AppendLine("<a href='#'>..</a>");
- }
- }
- for (int i = list.PageIndex-2; i <=list.PageIndex ; i++)
- {
- if (i < 1)
- continue;
- route["pageIndex"] = i - 1;
- sb.AppendLine(helper.ActionLink(@"<b>" + i.ToString() + @"</b>", route["action"].ToString(), route).ToHtmlString().Replace("<", "<").Replace(">", ">"));
- }
- sb.AppendLine(@"<a class='active' href='#'><b>" + (list.PageIndex + 1) + @"</b></a>");
- for (int i = list.PageIndex + 2; i < list.PageIndex + 4; i++)
- {
- if (i>list.PageTotal)
- continue;
- route["pageIndex"] = i - 1;
- sb.AppendLine(helper.ActionLink(@"<b>" + i.ToString() + @"</b>", route["action"].ToString(), route).ToHtmlString().Replace("<", "<").Replace(">", ">"));
- }
- if (list.PageIndex<list.PageTotal-4)
- {
- if (list.PageIndex<=list.PageTotal-6)
- {
- sb.AppendLine("<a href='#'>..</a>");
- }
- route["pageIndex"] = list.PageTotal - 1;
- sb.AppendLine(helper.ActionLink(@"<b>" + list.PageTotal.ToString() + @"</b>", route["action"].ToString(), route).ToHtmlString().Replace("<", "<").Replace(">", ">"));
- }
- if (list.PageIndex<list.PageTotal-1)
- {
- route["pageIndex"] = list.PageIndex + 1;
- sb.AppendLine(helper.ActionLink("下一页", route["action"].ToString(), route).ToHtmlString());
- }
- else
- {
- sb.AppendLine("<a class=\"nextpage\" href=\"javascript:void(0);\">下一页</a>");
- }
- sb.AppendLine("</div>");
- return new MvcHtmlString(sb.ToString());
- }
- }
- }
- @model MvcAppPager.Models.PageOfList<MvcAppPager.Models.Order>
- @{
- Layout = null;
- ViewBag.Title = "Index";
- }
- <!DOCTYPE html>
- <html>
- <head>
- <meta name="viewport" content="width=device-width" />
- <title>Index</title>
- @Styles.Render("~/Content/page.css")
- </head>
- <body>
- <div id="body" style="width: 400px;float: left">
- @using (Html.BeginForm("Index","Home",FormMethod.Get))
- {
- <table>
- <tr>
- <th>ID</th>
- <th>订单号</th>
- <th>运单号</th>
- <th>运费</th>
- </tr>
- @if (Model != null && Model.Count > 0)
- {
- foreach (var item in Model.ToList())
- {
- <tr>
- <td>@item.ID</td>
- <td>@item.OrderNo</td>
- <td>@item.EMS</td>
- <td>@item.WayFee</td>
- </tr>
- }
- }
- </table>
- @MvcAppPager.Models.ExtHelper.UIPaging(this.Html,Model)
- }
- </div>
- </body>
- </html>
- .fenye {
- float: right;
- }
- .fenye a,.fenye span,.fenye select {
- display: block;
- float: left;
- margin: 0 2px;
- }
- .fenye a {
- background: #fff;
- border: 1px solid #d6d6d6;
- color: #6f6f6f;
- height: 22px;
- line-height: 22px;
- margin: 0 2px;
- padding: 0 0 0 8px;
- position: relative;
- }
- .fenye a.nextpage:hover {
- background: #fff;
- border: 1px solid #ba191b;
- color: #000;
- }
- .fenye a.nextpage {
- height: 22px;
- margin: 0 0 0 2px;
- padding: 0px 5px;
- }
- .fenye a.backpage {
- background: #fff;
- border: 1px solid #d6d6d6;
- height: 22px;
- margin: 0 2px 0 0;
- padding: 0px 5px;
- }
- .fenye a.backpage:hover {
- background: url("images/pagebut.gif") no-repeat scroll left top rgba(0, 0, 0, 0);
- color: #000;
- }
- .fenye a:hover,.fenye a.active {
- background: #c32325;
- border: 1px solid #ba191b;
- color: #ffffff;
- text-decoration: none;
- }
- .fenye a.shenlue {
- background: none repeat scroll 0 0 rgba(0, 0, 0, 0);
- margin: 0 5px;
- padding: 0;
- border: none;
- }
- .fenye a.shenlue:hover {
- color: #333333;
- }
- .fenye a b {
- display: block;
- font-size: 12px;
- font-weight: normal;
- height: 22px;
- line-height: 22px;
- margin-right: 0;
- padding: 0 8px 0 0;
- position: relative;
- }
ASP.NET MVC 分页之HtmlHelper的更多相关文章
- ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版
MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...
- ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页
我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了 ...
- 基于Bootstrap的Asp.net Mvc 分页
基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...
- Asp.net MVC分页实例
分页是网页基本功能,这里主要讨论在Asp.net MVC环境下分页的前端实现,不涉及后台分页.实现效果如下图显示: Step 1.建立分页信息类 public class PagingInfo { p ...
- ASP.NET MVC分页实现
ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...
- 自己用的一个ASP.Net MVC分页拿出来分享下(转)
实例懒得做.切几个图把代码发上要用的自己搞啦~ 下面是一个helper类. namespace System.Web.Mvc { public enum BarStyle { yahoo, digg, ...
- asp.net MVC分页
.Net MVC 分页代码,分页的关键就是在于这几个参数pageIndex ,recordCount,pageSize ,下面是张林的网站做的一个简单的分页代码 效果如图 public class ...
- 【asp.net mvc】 扩展 htmlhelper 实现分页
参考文档:http://www.cnblogs.com/caofangsheng/p/5670071.html http://www.cnblogs.com/arte ...
- Asp.Net MVC 分页、检索、排序整体实现
很多时候需要这样的功能,对表格进行分页.排序和检索.这个有很多实现的方式,有现成的表格控件.用前端的mvvm,用户控件.但很多时候看着很漂亮的东西你想进一步控制的时候却不那么如意.这里自己实现一次,功 ...
随机推荐
- 攻防世界 WEB篇
0x01 ics-06 查看源码发现:index.php 一开始直接用sqlmap跑了下没有发现注入,然后用brupsuite爆破参数 0x02 NewsCenter SQL注入中的POST注入,查阅 ...
- [CSP-S模拟测试]:平均数(二分答案+归并排序)
题目描述 有一天,小$A$得到了一个长度为$n$的序列.他把这个序列的所有连续子序列都列了出来,并对每一个子序列都求了其平均值,然后他把这些平均值写在纸上,并对它们进行排序,最后他报出了第$k$小的平 ...
- 数据挖掘之DecisionTreeClassifier决策树
用决策树DecisionTreeClassifier的数据挖掘算法来通过三个参数,Pclass,Sex,Age,三个参数来求取乘客的获救率. 分为三大步: 一,创建决策树DecisionTreeCla ...
- Mac os下设置国内镜像加速站
无法忍受国外pip 仓库的龟速地址,安利一波国内高速镜像地址... 首推阿里云 repository 马爸爸 I ❤ u $ vim ~/.pip/pip.conf 在config中做如下配置: [ ...
- php使用curl抓取网页自动跳转问题处理
问题分析: 请求抓取http://go.com数据: function curlGet($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ...
- 107、TensorFlow变量(三)
创建秩为1的张量 # create a rank1 tensor object import tensorflow as tf mystr = tf.Variable(["Hello&quo ...
- 小米手机_adb安装apk报错”Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]“
问题: adb安装apk至小米手机时,安装失败,报错提示“Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]”,如下图 ...
- haskell目录层次
daniel@daniel-mint /usr/lib/ghc/haskell2010-1.1.1.0 $ tree . ├── Control │ └── Monad.hi ├── Data │ ...
- USACO 5.4 章节
Canada Tour 题目大意 双向连通图,点从左向右排列, 你需要先从最左的点到最右的点,(过程中只能从左向右走) 然后再从最右的点返回最左的点,(过程中只能从右向左走) 过程中除了最左的点,其它 ...
- upc组队赛15 Made In Heaven【第K短路 A*】
Made In Heaven 题目描述 One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with ...