基于Bootstrap的Asp.net Mvc 分页的实现
最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下。首先新建一个Mvc 项目,既然是分页就需要一些数据,我这边是模拟了一些假的数据,实际的项目中都是在数据库中去取得的,很简单的数据:
- public class User
- {
- public string Name { get; set; }
- public int Age { get; set; }
- }
取数据我这边是加了120个数据:
- public List<User> GetData()
- {
- List<User> list = new List<User>();
- string[] array = new string[] { "Tom", "Joy", "James", "Kobe", "Jodan", "LiLei", "Hanmeimei", "xiaoming", "Danneil", "Forest", "Newbee", "Azure" };
- for (int i = ; i < ; i++)
- {
- User user = new User();
- user.Age = i;
- user.Name = array[i / ];
- list.Add(user);
- }
- return list;
- }
然后新建一个 PageModel类
- /// <summary>
- /// 有些属性我写成了虚的, 这样可以根据不同的需要去重写便于扩展
- /// </summary>
- public class BasePageModel
- {
- public string SearchKeyWord { get; set; }
- /// <summary>
- ///点击分页是指向 Action 的名字 根据具体需要而定
- /// </summary>
- public virtual string ActionName
- {
- get
- {
- return "Index";
- }
- }
- public int TotalCount { get; set; }
- public int CurrentIndex { get; set; }
- public int TotalPages
- {
- get
- {
- return (int)Math.Ceiling((double)TotalCount / (double)PageSize);
- }
- }
- /// <summary>
- /// 根据需要具体而定PageSize
- /// </summary>
- public virtual int PageSize
- {
- get { return ; }
- }
- /// <summary>
- ///根据需要具体而定 分页显示最大的页数
- /// </summary>
- public virtual int DisplayMaxPages
- {
- get
- {
- return ;
- }
- }
- public bool IsHasPrePage
- {
- get
- {
- return CurrentIndex != ;
- }
- }
- public bool IsHasNextPage
- {
- get
- {
- return CurrentIndex != TotalPages;
- }
- }
- }
再新建一个分布式图 建在Shared 文件夹里,代码如下:
- @using MvcTest.Models
- @model MvcTest.Models.BasePageModel
- @{if (Model != null && Model.TotalPages != )
- {
- <ul class="pagination">
- @{
- @Url.CreatPageLiTag(Model, Model.CurrentIndex - , false, Model.IsHasPrePage, "«")
- if (Model.TotalPages <= Model.DisplayMaxPages)
- {
- for (int i = ; i < Model.TotalPages; i++)
- {
- @Url.CreatPageLiTag(Model, i, i == Model.CurrentIndex);
- }
- }
- else
- {
- if (Model.CurrentIndex - < )
- {
- for (int i = ; i <= Model.DisplayMaxPages - ; i++)
- {
- @Url.CreatPageLiTag(Model, i, i == Model.CurrentIndex);
- }
- @Url.CreatPageLiTag(Model, Model.CurrentIndex, false, false, "...");
- }
- else
- {
- @Url.CreatPageLiTag(Model, );
- if (Model.CurrentIndex + (Model.DisplayMaxPages - ) / >= Model.TotalPages)
- {
- int page = Model.CurrentIndex - (Model.DisplayMaxPages - Model.TotalPages + Model.CurrentIndex - );
- if (page > )
- {
- @Url.CreatPageLiTag(Model, Model.CurrentIndex, false, false, "...");
- }
- for (int i = page + ; i < Model.TotalPages; i++)
- {
- @Url.CreatPageLiTag(Model, i, i == Model.CurrentIndex);
- }
- }
- else
- {
- int page = Model.CurrentIndex - (Model.DisplayMaxPages - ) / ;
- if (page > )
- {
- @Url.CreatPageLiTag(Model, Model.CurrentIndex, false, false, "...");
- }
- for (int i = page; i < Model.CurrentIndex + (Model.DisplayMaxPages - ) / ; i++)
- {
- @Url.CreatPageLiTag(Model, i, i == Model.CurrentIndex);
- }
- @Url.CreatPageLiTag(Model, Model.CurrentIndex, false, false, "...");
- }
- }
- }
- @Url.CreatPageLiTag(Model, Model.TotalPages, Model.TotalPages == Model.CurrentIndex)
- @Url.CreatPageLiTag(Model, Model.CurrentIndex + , false, Model.IsHasNextPage, "»")
- }
- </ul>
- }}
以上就是分页的核心代码,包括了一些判断逻辑,其中的 @Url.CreatPageLiTag 我是写了一个扩展
- public static class HtmlHelperExtensions
- {
- public static MvcHtmlString CreatPageLiTag(this UrlHelper urlHelper,
- BasePageModel pageModel,
- int index,
- bool isCurrentIndex = false,
- bool isDisable = true,
- string content = "")
- {
- string url = urlHelper.Action(pageModel.ActionName, new { searchkey = pageModel.SearchKeyWord, index = index });
- string activeClass = !isCurrentIndex ? string.Empty : "class='active'";
- string disableClass = isDisable ? string.Empty : "class='disabled'";
- url = isDisable ? "href='" + url + "'" : string.Empty;
- string contentString = string.IsNullOrEmpty(content) ? index.ToString() : content;
- return new MvcHtmlString("<li " + activeClass + disableClass + "><a " + url + ">" + contentString + "</a></li>");
- }
- }
在这里面里面 是生成<a/>标签的,样式可以自己定。无非就是一些css 的定义。
然后就在action 的方法里取数据
- public ActionResult Index(string searchkey, string index)
- {
- if (string.IsNullOrEmpty(index))
- index = "";
- if (string.IsNullOrEmpty(searchkey))
- searchkey = string.Empty;
- List<User> totalList = GetData().Where(p=>p.Name.ToLower().Contains(searchkey.ToLower())).ToList();
- BasePageModel page = new BasePageModel() { SearchKeyWord = searchkey, CurrentIndex = Int32.Parse(index), TotalCount = totalList.Count };
- List<User> pageList = totalList.Skip((page.CurrentIndex - ) * page.PageSize).Take(page.PageSize).ToList();
- ViewData["pagemodel"] = page;
- return View(pageList);
- }
前台代码:
- @model List<MvcTest.Controllers.User>
- @{
- ViewBag.Title = "Index";
- }
- <h2>Data List</h2>
- <form class="navbar-form navbar-right" name="searchform" action="@Url.Action("Index", new {index="1" }) method="post">
- <div class="input-group">
- <input type="text" id="searchkey" name="searchkey" class="form-control" placeholder="Search..." />
- <span class="btn input-group-addon" onclick="document.searchform.submit();">
- <span class="glyphicon glyphicon-search"></span>
- </span>
- </div>
- </form>
- <table class="table table-hover table-bordered table-condensed">
- <thead>
- <tr>
- <th>Name</th>
- <th>Age</th>
- </tr>
- </thead>
- <tbody>
- @foreach (var item in Model)
- {
- <tr>
- <td>@item.Name</td>
- <td>@item.Age</td>
- </tr>
- }
- </tbody>
- </table>
- @Html.Partial("MvcPagerView", ViewData["pagemodel"])
Ok 搞定。效果如下:
分页的样式我还是比较喜欢的,当然可以自己扩展。
基于Bootstrap的Asp.net Mvc 分页的实现的更多相关文章
- 基于Bootstrap的Asp.net Mvc 分页
基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...
- 基于Bootstrap的Asp.net Mvc 分页的实现(转)
最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一个Mvc 项目,既然是分页就需要一些数据,我这 边是模拟了一 ...
- ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版
MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...
- ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页
我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了 ...
- 基于C#和Asp.NET MVC开发GPS部标视频监控平台
基于C#和Asp.NET MVC开发GPS部标监控平台 目前整理了基于.NET技术的部标平台开发文章,可以参考: 1.部标Jt808协议模拟终端的设计和开发 2.C#版的808GPS服务器开发-> ...
- ASP.NET MVC分页实现
ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...
- 基于C#和Asp.NET MVC开发GPS部标监控平台
基于交通部796标准开发部标监控平台,选择开发语言和技术也是团队要思考的因素,其实这由团队自己擅长的技术来决定,如果擅长C#和Asp.NET, 当然开发效率就高很多.当然了技术选型一定要选用当前主流的 ...
- Bootstrap 与 ASP.NET MVC 4 不使用 NuGet Package 笔记
转自 http://www.mytecbits.com/microsoft/dot-net/bootstrap-with-asp-net-mvc-4-step-by-step 单位最近做了一个Boot ...
- Asp.net MVC分页实例
分页是网页基本功能,这里主要讨论在Asp.net MVC环境下分页的前端实现,不涉及后台分页.实现效果如下图显示: Step 1.建立分页信息类 public class PagingInfo { p ...
随机推荐
- PDF文本内容批量提取到Excel
QQ:231469242,版权所有 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269 ...
- MacBook Air网络问题
自从买了本本之后,一直觉得无线网连接不能正常使用,最开始觉得是网络不给力,因为图标都没有满格.后来搬家,网速家里的window,iphone设备都能正常使用,就我的mac 本本图标显示满格,但是网页打 ...
- iframe中的历史记录问题汇总及解决方案[转]
在做页面统计的时候遇到了两个问题: 1.包含iframe的页面,在IE下按后退按钮不能刷新主页面.隐藏Iframe的src是统计程序的url,每点一次后退,就会发出一次页面加载时间请求. 2.由js动 ...
- Linuc学习3-输入和输出重定向
已打开的文件描述符在fork和exec调用后保留下来,我们可以利用对进程这方面知识点的理解来改变程序的行为. 这个例子涉及一个过滤程序:它从标准输入读取数据,然后向标准输出写数据,同时在输入和输出之间 ...
- mysql手工注入步骤
1.一般用 ' " ) 等符号来闭合,再用%23(即#)来注释后面语句. 2.查找数据库,先用order by n猜字段,再用union select 1,2,3 ...n%23来查询. ...
- DataTable转任意类型对象List数组-----工具通用类(利用反射和泛型)
public class ConvertHelper<T> where T : new() { /// <summary> /// 利用反射和泛型 /// </summa ...
- win10系统下我的电脑右键没有属性
1.右键点击系统左下角的开始,菜单中点击运行 2.在输入框中输入regeidt,点击确定打开系统的注册表编辑器 3.然后依次打开HKEY_CURRENT_USER\Software\Microsoft ...
- 【LinuxC】GCC编译C程序,关闭随机基址
1.编译.链接和运行程序 C代码示例: #include <stdio.h> #include <stdlib.h> int main() { printf("hel ...
- aarch64_j1
JSCookMenu-2.0.4-13.fc26.noarch.rpm 2017-02-14 07:06 37K fedora Mirroring Project Java-WebSocket-1.3 ...
- React-Native 之 FlexBox介绍和使用
# 前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会 ...