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,整合之后为后台开发节省了大量时间. 发现虽然不是完美,整体效果还是不 ...
随机推荐
- JavaIO总结
Java IO流分为字节流和字符流 下面首先介绍一下字节流 /** * 字节流测试 * @author hc * */ public class Test { public static void m ...
- centos 服务开机启动设置
建立服务文件以nginx 为例 vim /lib/systemd/system/nginx.service 在nginx.service 中插入一下内容 [Unit] Description=ngin ...
- 基础笔记6(exception)
1.异常:一种处理错误的机制,将错误和业务分离. throwable的子类 error 和exception exception 分两类:checked (需要捕获处理或者抛出)和unchecked( ...
- 基础笔记5(file)
file 可以是目录和文件(只是是java程序与系统的文件进行一种关联) File file1 = new File("f:/mytest", "test5.txt&qu ...
- JS_call_APP native 与 html的交互
1.***** 特点:下个版本的交互准备使用这个(http://www.knowsky.com/884428.html) https://github.com/lifei321/JS-OC http: ...
- html,css,js加载顺序
1.js放在head中会立即执行,阻塞后续的资源下载与执行.因为js有可能会修改dom,如果不阻塞后续的资源下载,dom的操作顺序不可控. 正常的网页加载流程是这样的. 浏览器一边下载HTML网页,一 ...
- CSS 3 动画2D
动画分为两种,1,逐帧动画 组成动画的每一个画面就是一帧 2,关键帧动画,确定关键帧电脑会自动过度 动画中如果遇到不兼容的问题也是要加前缀 @-webkit-keyframes规则 @-webk ...
- Setup Factory Error3014
在用Setup Factory打包软件的时候出现Error3014 一般都是由于软件冲突引起的 我的问题是由于杀毒软件 ,在打包的时候关闭杀毒软件 就能成功打包了.
- 有关于psExec的使用
psExec是微软pstools工具包中最常用的一个工具,也是在内网渗透中的免杀渗透利器. psExec能够在命令行下在对方没有开启telnet服务的时候返回一个半交互的命令行,像telnet客户端一 ...
- 加强型无穷集合:InfiniteList<T>,可指定遍历方向和偏移量,只要集合有元素并且偏移量不为 0,将永远遍历下去。
主类: public class InfiniteList<T> : IEnumerable<T> { public List<T> SourceList { ge ...