最近写了一个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 = 0; i < 120; i++)

{

User user = new User();

user.Age = i;

user.Name = array[i / 10];

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 10; }

}

/// <summary>

///根据需要具体而定 分页显示最大的页数

/// </summary>

public virtual int DisplayMaxPages

{

get

{

return 10;

}

}

public bool IsHasPrePage

{

get

{

return CurrentIndex != 1;

}

}

public bool IsHasNextPage

{

get

{

return CurrentIndex != TotalPages;

}

}

}

再新建一个分布式图 建在Shared 文件夹里,代码如下:

@using MvcTest.Models

@model MvcTest.Models.BasePageModel

@{if (Model != null && Model.TotalPages != 0)

{

<ul class="pagination">

@{

@Url.CreatPageLiTag(Model, Model.CurrentIndex - 1, false, Model.IsHasPrePage, "&laquo;")

if (Model.TotalPages <= Model.DisplayMaxPages)

{

for (int i = 1; i < Model.TotalPages; i++)

{

@Url.CreatPageLiTag(Model, i, i == Model.CurrentIndex);

}

}

else

{

if (Model.CurrentIndex - 1 < 5)

{

for (int i = 1; i <= Model.DisplayMaxPages - 1; i++)

{

@Url.CreatPageLiTag(Model, i, i == Model.CurrentIndex);

}

@Url.CreatPageLiTag(Model, Model.CurrentIndex, false, false, "...");

}

else

{

@Url.CreatPageLiTag(Model, 1);

if (Model.CurrentIndex + (Model.DisplayMaxPages - 2) / 2 >= Model.TotalPages)

{

int page = Model.CurrentIndex - (Model.DisplayMaxPages - Model.TotalPages + Model.CurrentIndex - 1);

if (page > 1)

{

@Url.CreatPageLiTag(Model, Model.CurrentIndex, false, false, "...");

}

for (int i = page + 1; i < Model.TotalPages; i++)

{

@Url.CreatPageLiTag(Model, i, i == Model.CurrentIndex);

}

}

else

{

int page = Model.CurrentIndex - (Model.DisplayMaxPages - 2) / 2;

if (page > 2)

{

@Url.CreatPageLiTag(Model, Model.CurrentIndex, false, false, "...");

}

for (int i = page; i < Model.CurrentIndex + (Model.DisplayMaxPages - 2) / 2; 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 + 1, false, Model.IsHasNextPage, "&raquo;")

}

</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 = "1";

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 - 1) * 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 分页的实现(转)的更多相关文章

  1. 基于Bootstrap的Asp.net Mvc 分页

    基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...

  2. 基于Bootstrap的Asp.net Mvc 分页的实现

    最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一个Mvc 项目,既然是分页就需要一些数据,我这边是模拟了一些 ...

  3. ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版

    MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...

  4. ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页

    我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了 ...

  5. 基于C#和Asp.NET MVC开发GPS部标视频监控平台

    基于C#和Asp.NET MVC开发GPS部标监控平台 目前整理了基于.NET技术的部标平台开发文章,可以参考: 1.部标Jt808协议模拟终端的设计和开发 2.C#版的808GPS服务器开发-> ...

  6. ASP.NET MVC分页实现

    ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...

  7. 基于C#和Asp.NET MVC开发GPS部标监控平台

    基于交通部796标准开发部标监控平台,选择开发语言和技术也是团队要思考的因素,其实这由团队自己擅长的技术来决定,如果擅长C#和Asp.NET, 当然开发效率就高很多.当然了技术选型一定要选用当前主流的 ...

  8. Bootstrap 与 ASP.NET MVC 4 不使用 NuGet Package 笔记

    转自 http://www.mytecbits.com/microsoft/dot-net/bootstrap-with-asp-net-mvc-4-step-by-step 单位最近做了一个Boot ...

  9. Asp.net MVC分页实例

    分页是网页基本功能,这里主要讨论在Asp.net MVC环境下分页的前端实现,不涉及后台分页.实现效果如下图显示: Step 1.建立分页信息类 public class PagingInfo { p ...

随机推荐

  1. FreeRTOS Customisation -- FreeRTOSConfig.h

    http://www.freertos.org/a00110.html FreeRTOS is customised using a configuration file called FreeRTO ...

  2. Ubuntu 16.04安装cuda7.5 GCC

    http://www.linuxidc.com/Linux/2017-01/139320.htm 在介绍Ubuntu 16.04安装 CUDA7.5开始前,先辨析几个概念GPU.NVIDIA.NVID ...

  3. 字符集UTFMB4

    http://my.oschina.net/leejun2005/blog/232732#OSC_h3_4 http://ju.outofmemory.cn/entry/211473

  4. Win8系统108个运行命令 你能记住多少?

    Win8运行命令:程序和功能   取消了开始菜单的Win8让人感觉很不习惯,这才发现原来开始菜单可以做这么多事.不过Win8中的一些快捷键还沿用了Windows一直以来的习惯,比如按下Windows ...

  5. dubbo知识点理解2

    作者:网易云链接:https://www.zhihu.com/question/45413135/answer/226794957来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  6. redis.conf配置解释

    daemonize:如果需要在后台运行,把该项改为yespidfile:配置多个pid的地址,默认在/var/run/redis.pidbind:绑定ip,设置后只接受来自该ip的请求port:监听端 ...

  7. Servlet Filter 示例

    1. CityQuery.java package com.xxx.servlet; import com.google.common.collect.Lists; import com.xxx.da ...

  8. myeclipse使用maven教程

    本教程包括 1.使用myeclipse构建maven下载jar包 2.使用myeclipse运行maven命令 3.使用myeclipse管理maven项目 搭建maven教程以后有时间了贴进来. 1 ...

  9. Orchard运用 - 为博客启用Markdown编辑器

    有时决定你是否使用某一个博客系统,最看重就是如何更简便的写博客,不能让其成为一个负担或别扭费力不讨好的工作. 对此一个好的编辑器就是一个最靓丽的卖点.比如最新的博客系统ghost.org就只定位一个最 ...

  10. LruCache DiskLruCache 缓存 简介 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...