MVC中的自定义控件——分页
上一篇是个简单例子,这篇借分页写个升级版的例子。
不想拼html代码,因为不好修改,那写一个PartialView.
@model System.Web.Mvc.PagerModel
@if (Model.PagerShow)
{
<div id="@Model.PagerId" class="pagination pagination-right">
<ul>
<li class="@((Model.CurTeam == 1)?"disabled":"")"><a href="?p=1"><i class="icon-fast-backward"></i></a></li>
<li class="@((Model.CurTeam == 1)?"disabled":"")"><a href="?p=@Model.PreStep"><i class="icon-backward"></i></a></li>
@foreach (var item in Model.PageList)
{
<li class="@((item.PageNumber == Model.CurPage)?"active":"")"><a href="?p=@item.PageNumber" >@item.PageNumber</a></li>
}
<li class="@((Model.CurTeam == Model.TotalTeam)?"disabled":"")"><a href="?p=@Model.NextStep"><i class="icon-forward"></i></a></li>
<li class="@((Model.CurTeam == Model.TotalTeam)?"disabled":"")"><a href="?p=@Model.TotalPage"><i class="icon-fast-forward"></i></a></li>
</ul>
</div>
}
然后写扩展方法,顺带PartialView的Model。用HtmlHelper的Partial生成HtmlString。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;
using System.Text; namespace System.Web.Mvc
{
/// <summary>
/// 分页控件属性
/// </summary>
public class PagerModel
{
/// <summary>
/// 页码控件ID
/// </summary>
public string PagerId { get; set; }
/// <summary>
/// 页码空控件开关
/// </summary>
public bool PagerShow { get; set; }
/// <summary>
/// 当前分组,从1开始
/// </summary>
public int CurTeam { get; set; }
/// <summary>
/// 前一跳页码
/// </summary>
public int PreStep { get; set; }
/// <summary>
/// 当前页码,从1开始
/// </summary>
public int CurPage { get; set; }
/// <summary>
/// 后一跳页码
/// </summary>
public int NextStep { get; set; }
/// <summary>
/// 总页数
/// </summary>
public int TotalPage { get; set; }
/// <summary>
/// 页码分组数
/// </summary>
public int TotalTeam { get; set; }
/// <summary>
/// 当前页码组
/// </summary>
public List<PageModel> PageList { get; set; } } /// <summary>
/// 页码属性
/// </summary>
public class PageModel
{
/// <summary>
/// 页码
/// </summary>
public int PageNumber { get; set; }
} public static class PageHelper
{
public static MvcHtmlString Pager(this HtmlHelper helper,
string pagerId, //分页控件Id
int curPage, //当前页
int pagerSize, //页码个数
int totalSize, //总记录数
int pageSize, //每页记录数
string view //分页模板
)
{
if (curPage<)
{
curPage = ;
}
if (totalSize<)
{
totalSize = ;
}
PagerModel pager = new PagerModel();
pager.PagerId = pagerId;
pager.CurPage = curPage;
pager.TotalPage = (totalSize % pageSize == ) ? (totalSize / pageSize) : (totalSize / pageSize) + ;
if (curPage > pager.TotalPage)
{
curPage = pager.TotalPage;
}
int curTeam = (curPage % pagerSize == ) ? (curPage / pagerSize) : (curPage / pagerSize) + ; //页码当前分组
pager.TotalTeam = (pager.TotalPage % pagerSize == ) ? (pager.TotalPage / pagerSize) : (pager.TotalPage / pagerSize) + ; //页码当前分组
pager.CurTeam = curTeam;
int leftPageNum = (curTeam - )* pagerSize + ;//左边界
pager.PreStep = (leftPageNum - pagerSize) > ? (leftPageNum - pagerSize) : ;
pager.NextStep = (leftPageNum + pagerSize) <= pager.TotalPage ? (leftPageNum + pagerSize) : leftPageNum;
if (pager.TotalPage > )
{
pager.PagerShow = true;//显示分页
List<PageModel> pageList = new List<PageModel>();
int step = (leftPageNum + pagerSize) < pager.TotalPage ? pagerSize : pager.TotalPage % pageSize ;
var sourceList = Enumerable.Range(leftPageNum, step);
pageList.AddRange(sourceList.Select(p => new PageModel{PageNumber = p}));
pager.PageList = pageList;
}
else
{
pager.PagerShow = false;//页数少于一页,则不显示分页
}
return helper.Partial(view, pager);
}
}
}
MVC中的自定义控件——分页的更多相关文章
- MVC中的自定义控件
MVC中的控件都是HtmlHelper的扩展方法(不了解扩展方?法请阅读扩展方法),比如@Html.ActionLink,F12可以看到它是这样写的: public static MvcHtmlStr ...
- asp.mvc中的vue分页实例,分页组件无法重置reload,解决点击查询按钮后,分页不刷新的问题
刚刚接触Vue.js,现在需要做一个查询功能,并且进行服务端分页.主要思路是在页面中注册一个分页组件,然后进行调用.代码如下 1.引用vue.js,具体去网上下载 2.在html的body中添加如下代 ...
- .net下MVC中使用Tuple分页查询数据
主要是在DAL层写查询分页的代码. 例如DAL层上代码: public Tuple<List<WxBindDto>, int> GetMbersInfo(int start, ...
- FineUIMvc随笔(6)对比WebForms和MVC中表格的数据库分页
声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 通过对比WebForms和MVC中表格数据库分页代码的不同,可以对 MVC 中的数据流转有更加深入的了解. WebForms 中 ...
- MVC中,查询以异步呈现,分页不用异步的解决方案
MVC中,查询以异步呈现,分页不用异步的解决方案 这种需求,用一个ASPX页面和一个ASCX分部视图就可以解决了,ASPX提供对ASCX的引用,ASCX显示列表信息,ASPX主页面提供查询功能 < ...
- datagrid在MVC中的运用01-基本属性并实现分页
本文体验jQuery EasyUI的datagrid在MVC中的应用.主要涉及到: ※ datagrid的基本属性和方法 ※ datagrid分页在前后台的实现 最终效果: 与视图显示对应的view ...
- MVC中实现加载更多
需要实现的功能: 数据太多想初次加载部分数据,在底部加上“加载更多”按钮 点击后加载第二页数据(从数据库只取指定页数据)后接在已有数据后面(类似于android中的下拉加载更多) 每次加载时显示“正在 ...
- 在 ASP.NET MVC 中充分利用 WebGrid (microsoft 官方示例)
在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...
- Asp.Net MVC中使用ACE模板之Jqgrid
第一次看到ACE模板,有种感动,有种相见恨晚的感觉,于是迅速来研究.它本身是基于bootstrap和jqueryui,但更nice,整合之后为后台开发节省了大量时间. 发现虽然不是完美,整体效果还是不 ...
随机推荐
- (4) 深入理解Java Class文件格式(三)
转载:http://blog.csdn.net/zhangjg_blog/article/details/21557357 首先, 让我们回顾一下关于class文件格式的之前两篇博客的主要内容. 在 ...
- 《BI项目笔记》基于雪花模型的维度设计
GBGradeCode 外键关系: 1 烟叶等级 T_GBGradeCode.I_DistinctionID=T_Distinction.I_DistinctionID 烟叶等级分为:上等烟.中等烟. ...
- iOS 键盘
http://blog.sina.com.cn/s/blog_7018d3820101djut.html 一.键盘风格 UIKit框架支持8种风格键盘. typedef enum { UIKeyboa ...
- 学习mongo系列(四) find().pretty() remove() 查询
一.find() 方法以非结构化的方式来显示所有文档.如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:db.collection_name.find().pretty ...
- io流操作大全
JAVA 中的IO流 一.流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部 ...
- NPM 使用介绍
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并 ...
- Evolutionary Computing: 2. Genetic Algorithm(1)
本篇博文讲述基因算法(Genetic Algorithm),基因算法是最著名的进化算法. 内容依然来自博主的听课记录和教授的PPT. Outline 简单基因算法 个体表达 变异 重组 选择重组还是变 ...
- linux驱动初探之杂项设备(控制两个GPIO口)
关键字:linux驱动.杂项设备.GPIO 此驱动程序控制了外接的两个二极管,二极管是低电平有效. 上一篇博客中已经介绍了linux驱动程序的编写流程,这篇博客算是前一篇的提高篇,也是下一篇博客(JN ...
- MySQL 循环执行kill语句杀掉连接
mysql中创建索引时,一直卡住不动,刚开始以为可能是数据量太大导致的,可是一直等了很久还是一样没有反应,看来操作的表被锁住了,执行show processlist 果然发现有大量的lock,使用ki ...
- Java过滤器,SpringMVC拦截器之间的一顺序点关系
由于最近做的项目中有一部分是接口远程调用,用到了接入权限和业务权限的鉴定,需要采用SpringMVC的拦截器,以前用Struts2的时候用过拦截器,而SpringMVC的拦截器功能之前没研究过,所以这 ...