ASP.NET MVC 分页之 局部视图
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);
} }
}
@model MvcAppPager.Models.IPageOfList
@Styles.Render("~/Content/page.css")
<div class="fenye"><span>共 @Model.RecordTotal 条 记录,每页 @Model.PageSize 条 </span>
@{
System.Web.Routing.RouteValueDictionary route = new System.Web.Routing.RouteValueDictionary();
foreach (var key in Html.ViewContext.RouteData.Values.Keys)
{
route[key] = Html.ViewContext.RouteData.Values[key];
} foreach (string key in Html.ViewContext.RequestContext.HttpContext.Request.QueryString)
{
route[key] = Html.ViewContext.RequestContext.HttpContext.Request.QueryString[key];
}
if (Model.PageIndex <= 0)
{
<a class="backpage" href="javascript:void(0);">上一页</a>
}
else
{
route["pageIndex"] = Model.PageIndex - 1;
Html.ActionLink("上一页", route["action"].ToString(), route).ToHtmlString();
} if (Model.PageIndex > 3)
{
route["pageIndex"] = 0;
Html.ActionLink("<b>1</b>", route["action"].ToString(), route).ToHtmlString().Replace("<", "<").Replace(">", ">"); if (Model.PageIndex >= 5)
{
<a href='#'>..</a>;
}
} for (int i = Model.PageIndex - 2; i <= Model.PageIndex; i++)
{
if (i < 1)
{continue;}
route["pageIndex"] = i - 1;
@Html.ActionLink(i.ToString(), route["action"].ToString(), route["controller"]); } <a class='active' href='#'><b> @(Model.PageIndex+1) </b></a>
for (var i = Model.PageIndex + 2; i <= Model.PageIndex + 4; i++)
{
if (i > Model.PageTotal)
{continue;}
else{
route["pageIndex"] = i - 1;
@Html.ActionLink(i.ToString(), route["action"].ToString(), route);
}
} if (Model.PageIndex < Model.PageTotal - 4)
{
if (Model.PageIndex <= Model.PageTotal - 6)
{
<a href='#'>..</a>
}
route["pageIndex"] = Model.PageTotal - 1;
@Html.ActionLink(Model.PageTotal.ToString(), route["action"].ToString(), route).ToHtmlString();
}
if (Model.PageIndex < Model.PageTotal - 1)
{
route["pageIndex"] = Model.PageIndex + 1;
Html.ActionLink("下一页", route["action"].ToString(), route).ToHtmlString();
}
else
{
<a class="nextpage" href="javascript:void(0);">下一页</a>
}
}
</div>
@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>
Html.RenderPartial("pager", 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 分页之 局部视图的更多相关文章
- ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页
我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了 ...
- ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版
MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...
- 基于Bootstrap的Asp.net Mvc 分页
基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...
- ASP.NET MVC分页实现
ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...
- Asp.net MVC分页实例
分页是网页基本功能,这里主要讨论在Asp.net MVC环境下分页的前端实现,不涉及后台分页.实现效果如下图显示: Step 1.建立分页信息类 public class PagingInfo { p ...
- 自己用的一个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 分页、检索、排序整体实现
很多时候需要这样的功能,对表格进行分页.排序和检索.这个有很多实现的方式,有现成的表格控件.用前端的mvvm,用户控件.但很多时候看着很漂亮的东西你想进一步控制的时候却不那么如意.这里自己实现一次,功 ...
- 自己动手写 ASP.NET MVC 分页 part1
学习编程也有一年半载了,从来没有自己动手写过东西,都是利用搜索软件找代码,最近偶发感慨,难道真的继续做码农??? 突发奇想是不是该自己动手写点东西,可是算法.逻辑思维都太弱了,只能copy网上的代码, ...
随机推荐
- [BZOJ1572] WorkScheduling
中文题目:工作安排 原文题目:Work Scheduling 传送门 本题可以采用贪心 算法一:按工作时间排序,如果工作能按时完成的工作就按时完成,如果工作不能按时完成就把之前价值最小的工作和当前作比 ...
- mysql中or和in,in和exists的效率问题
mysql中or和in的效率问题 在网上一直看到的是or和in的效率没啥区别,一直也感觉是这样,前几天刚好在看<mysql数据库开发的36条军规>的文章,里面提到了or和in的 ...
- SVG开发包, 20 个有用的 SVG 工具,提供更好的图像处理
20 个有用的 SVG 工具,提供更好的图像处理 SVG 现正在 Web 设计领域变得越发流行, 你可以使用 Illustrator 或者 Inkscape 来创建 SVG 图像. 但当进行 Web ...
- Where should I put <script> tags in HTML markup?
Where should I put <script> tags in HTML markup? When embedding JavaScript in an HTML document ...
- 单例模式@Singleton在测试中的运用
前言 单例模式是一种比较常用的设计模式,目的是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 测试种可能用到的场景 : 在很多时候,有些对象我们希望在整个程序只有一个实例,如线程池.数据库连 ...
- 爬取拉勾网python工程师的岗位信息并生成csv文件
转载自:https://www.cnblogs.com/sui776265233/p/11146969.html 代码写得很好,但是目前只看得懂前一部分 一.爬取和分析相关依赖包 Python版本: ...
- 关于linux的一些常用的指令
top:命令经常用来监控linux的系统状况,比如cpu.内存的使用. free:观察内存使用. Find:查找指定的文件. Whereis:查找指定的文件源和二进制文件和手册等 Which:用于查询 ...
- MyBatis中XML 映射配置文件的简单介绍
官网写的比较具体,可以查看以下的网站: http://www.mybatis.org/mybatis-3/zh/configuration.html 另外,实际用到标准的CRUD的操作和查询列表, & ...
- [Java 教程 00] 计算机基础
前言 我想,来到这的朋友肯定是想学习JAVA或者想要进入IT这个行业的.考虑到大家的基础可能不一样,有些人可能还是用着新买的电脑,为了让大家在后续的学习中更加顺畅.在学习一门全新的计算机语言之前,我需 ...
- 在Echarts区域的任何位置精准触发事件
需求背景:点击Echarts区域跳转页面,跳转的区域不包括grid的坐标及标签,翻看了Echarts官网,实现触发事件之的on方法,但是此方法只能在鼠标点击某个图形上会触发,这样并不能实现需求.通 ...