MVC默认路由实现分页(PagerExtend.dll下载)

这两天在群里有人咨询有没有现成的.net mvc分页方法,由此写了一个简单分页工具,这里简单分享下实现思路,代码,希望能对大家有些帮助,鼓励大家多造些轮子还是好的。

A.效果(这里用了bootstrap的样式)

MVC默认路由实现分页(PagerExtend.dll下载)

B.分析,知识点

a.分页通常由一下几个属性组成(当前页,总条数,分页记录数,路由地址),由此四项基本就能实现分页了,在加上一个控制样式的参数

b.各种数字的验证,计算总页数(如果总条数和分页记录数不能整除,那么最后相除的结果再+1)

c.下一页和上一下的按钮是零界点,需要判断是否是最后一页或者第一页来显示当前页数的继续增加或者减小

d.因为需要在cshtml文件中展示分页的效果,所以需要用到HtmlHelper扩展方法;扩展方法这里简单说下注意项:

.关键词this

.扩展方法对应的clas必须静态,该方法本身也是静态

.扩展方法对应的class后缀一般是Extensions修饰

e.试图页面@Html.PageExtend直接调用分页方法

C.代码展示

a.分页方法实现类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace PagerExtend
{
 public static class HtmlHelperExtensions
 {

  #region 分页扩展 PageExtend

  /// <summary>
  /// 分页option属性
  /// </summary>
  public class MoPagerOption
  {
   /// <summary>
   /// 当前页 必传
   /// </summary>
   public int CurrentPage { get; set; }
   /// <summary>
   /// 总条数 必传
   /// </summary>
   public int Total { get; set; }

   /// <summary>
   /// 分页记录数(每页条数 默认每页15条)
   /// </summary>
   public int PageSize { get; set; }

   /// <summary>
   /// 路由地址(格式如:/Controller/Action) 默认自动获取
   /// </summary>
   public string RouteUrl { get; set; }

   /// <summary>
   /// 样式 默认 bootstrap样式 1
   /// </summary>
   public int StyleNum { get; set; }
  }

  /// <summary>
  /// 分页扩展方法
  /// </summary>
  /// <param name="helper">html试图</param>
  /// <param name="option">分页属性</param>
  /// <returns>html样式</returns>
  public static MvcHtmlString PageExtend(this HtmlHelper helper, MoPagerOption option)
  {

   if (option.PageSize <= 0) { option.PageSize = 15; }
   if (option.CurrentPage <= 0) { option.CurrentPage = 1; }
   if (option.Total <= 0) { return MvcHtmlString.Empty; }

   //总页数
   var totalPage = option.Total / option.PageSize + (option.Total % option.PageSize > 0 ? 1 : 0);
   if (totalPage <= 0) { return MvcHtmlString.Create("分页异常"); }
   //当前路由地址
   if (string.IsNullOrEmpty(option.RouteUrl))
   {

    option.RouteUrl = helper.ViewContext.HttpContext.Request.RawUrl;
    if (!string.IsNullOrEmpty(option.RouteUrl))
    {

     var lastIndex = option.RouteUrl.LastIndexOf("/");
     option.RouteUrl = option.RouteUrl.Substring(0, lastIndex);
    }
   }
   option.RouteUrl = option.RouteUrl.TrimEnd('/');

   //构造分页样式
   var sbPage = new StringBuilder(string.Empty);
   switch (option.StyleNum)
   {
    case 2:
     {
      break;
     }
    default:
     {
      #region 默认样式

      sbPage.Append("<nav>");
      sbPage.Append(" <ul class=\"pagination\">");
      sbPage.AppendFormat("  <li><a href=\"{0}/{1}\" aria-label=\"Previous\"><span aria-hidden=\"true\">«</span></a></li>",
            option.RouteUrl,
            option.CurrentPage - 1 <= 0 ? 1 : option.CurrentPage - 1);

      for (int i = 1; i <= totalPage; i++)
      {

       sbPage.AppendFormat("  <li {1}><a href=\"{2}/{0}\">{0}</a></li>",
        i,
        i == option.CurrentPage ? "class=\"active\"" : "",
        option.RouteUrl);

      }

      sbPage.Append("  <li>");
      sbPage.AppendFormat("   <a href=\"{0}/{1}\" aria-label=\"Next\">",
           option.RouteUrl,
           option.CurrentPage + 1 > totalPage ? option.CurrentPage : option.CurrentPage + 1);
      sbPage.Append("    <span aria-hidden=\"true\">»</span>");
      sbPage.Append("   </a>");
      sbPage.Append("  </li>");
      sbPage.Append(" </ul>");
      sbPage.Append("</nav>");
      #endregion
     }
     break;
   }

   return MvcHtmlString.Create(sbPage.ToString());
  }
  #endregion
 }
}

b.View测试调用

@using PagerExtend
@model IEnumerable<XinSheng.Api.Controllers.MoAirticle>

<table>
 Url:@ViewBag.Url

 @foreach (var item in Model)
 {
  <tr>
   <td>@item.Title</td>
   <td>@item.Author</td>
   <td>@item.CreateTime</td>
  </tr>
 }
</table>

@Html.PageExtend(ViewBag.PagerOption as HtmlHelperExtensions.MoPagerOption)

c.Controller测试

using PagerExtend;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;

namespace XinSheng.Api.Controllers
{

 [Serializable]
 public class MoAirticle
 {

  public string Title { get; set; }
  public string Author { get; set; }
  public DateTime CreateTime { get; set; }
 }

 public class HomeController : Controller
 {

  public ActionResult Index(int id)
  {
   ViewBag.Title = "测试 分页";

   List<MoAirticle> moAirticles = new List<MoAirticle>();

   for (int i = 1; i < 50; i++)
   {

    moAirticles.Add(new MoAirticle
    {
     Author = "神牛步行" + i,
     CreateTime = DateTime.Now,
     Title = "博客园之" + i
    });
   }
   ViewBag.Url = Request.RawUrl;

   //初始化分页基础信息
   var option = new HtmlHelperExtensions.MoPagerOption
   {

    CurrentPage = id,
    PageSize = 15,
    Total = moAirticles.Count
   };
   //动态传递分页属性
   ViewBag.PagerOption = option;

   var articles = moAirticles.Skip((option.CurrentPage - 1) * option.PageSize).Take(option.PageSize).ToList();
   return View(articles);
  }
 }
}

D.分页PagerExtend.dll下载地址:PagerExtend.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2016-07-23

Asp.Net数据控件引用AspNetPager.dll分页实现代码

1.也许讲解有点初级,希望高手不要"喷"我,因为我知道并不是每一个人都是高手,我也怕高手们说我装13,小生不才: 2.如有什么不对的地方,还希望大家指出,一定虚心学习: 3.本文属于作者原创,尊重他人劳动成果,转载请注明作者,谢谢. 下面开讲: 第一步:首先是下载一个AspNetPager.dll 下载地址 AspNetPager.rar第二步:在项目的bin文件夹下引用AspNetPager.dll 如图: 第三步:在工具箱添加AspNetPager控件,如图: 接下来再如图: 这样

Asp.Net中的三种分页方式总结

通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等.这里分别做总结. 第一种:使用GridView自带分页,这种是最简单的分页方法. 前台的方法: 复制代码 代码如下: <asp:GridView ID="GridView1" AllowPaging="true" runat="server" onpageindexchanging="G

ASPNETPAGER分页控件的使用方法[图文]

1. 加入dll文件这是必须的. 2.拖入控件到应用位置,添加引用: 引用: <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %> 控件: 复制代码 代码如下: <div style="text-align:center;"> <webdiyer:AspNetPager ID=&q

Asp.net GridView使用大全(分页实现)

GridView自带的分页功能实现: 要实现GrdView分页的功能操作如下:1.更改GrdView控件的AllowPaging属性为true.2.更改GrdView控件的PageSize属性为 任意数值(默认为10)3.更改GrdView控件的PageSetting->Mode为Numeric等(默认为Numeric)该属性为分页样式.GridView属性设置好了,从页面上也能看到分页样式. 现在开始实现分页的功能: 1.在<<asp:GridView ID=......>后添加

MVC分页之MvcPager使用详解

最近刚刚接触MVC不久,因项目中要用到分页,网上找了下资料,最后采用了MvcPager(http://www.webdiyer.com/),支持同步和Ajax异步分页.废话不多说了直接上代码. 一.MvcPager异步  ViewModel: public class Article { [Display(Name = "信息编号")] public int ID { get; set; } [Display(Name = "信息标题")] public strin

asp.net分页控件AspNetPager的样式美化

在前段时间的开发网站的过程中,突然觉得这个简洁的样式看着和网站整体的风格实在不搭调,于是看看AspNetPager的最后生成html,写了一段CSS样式,将分页的样式和网站整体风格统一起来了. 效果如下: 做的不是很好看,希望大家不要丢砖头,俺的头没包棉絮,伤不起 ~-_-~ CSS样式表: /* AspNetPager Style Power By http://www.edweb.cn */.pager{ width:95%;  margin:10px; line-height:20px;

ASP.NET 高性能分页代码

最近给分页快搞死,记得之前曾经发过修改DW ASP分页的方法,后来又写过手工打造的ASP分页,现在进入.NET当然要配合存储过程打造纯手工高性能分页了. 为什么会叫做高性能,为什么要手工打造,不使用.NET现有的分页控件呢?这个还要追溯到我修改DW ASP分页的时候,那个我还不怎么懂程序这个东西,只会修修补补,就更不要去谈什么性能问题.当时改的很心烦,接着叫我的私人技术总监张总帮我看看,当时张总就以一种不屑一顾的眼神往着我,说了句话:值得吗? 接着到我手工打造ASP分页,又搞不下去了,张总丢给我

ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedList.Mvc)

ASP.NET MVC中进行分页的方式有多种,但在NuGet上使用最广泛的就是用PagedList.X.PagedList.Mvc进行分页.(原名为:PagedList.Mvc,但是2014年开始,作者将项目名称改名字为"X.PagedList.Mvc"),用这个插件的话会非常便利,大家可以试试,接下来将给大家讲下如何安装这个NuGet插件. ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(原名为PagedList.Mvc) 1.工具--NuGet 程序包管理

Java简单实现SpringMVC+MyBatis分页插件

1.封装分页Page类 package com.framework.common.page.impl; import java.io.Serializable; import com.framework.common.page.IPage; /** * * * */ public abstract class BasePage implements IPage, Serializable { /** * */ private static final long serialVersionUID

asp.net Datalist控件实现分页功能

在.aspx页面里的代码 复制代码 代码如下: <asp:DataList ID="DataList1" runat="server" Width="976px" Height="745px" BorderWidth="2px" CellPadding="2" CellSpacing="2" RepeatColumns="7" RepeatD

asp.net中将数据库绑定到DataList控件的实现方法与实例代码

解决方法1: datalist databind() 解决方法2: 查看MSDN上的详细说明资料 解决方法3: 在DataList的模板中用table表格,如: 复制代码 代码如下: <asp:DataList ID="dlDetailedInfo" runat="server" OnItemDataBound="dlDetailedInfo_ItemDataBound" Width="100%"> <Ite

ASP.NET数据绑定之DataList控件实战篇

上篇文章大概讲了DataList的一些基础知识,掌握这些知识在将来的应用中起到很大的作用,现在我们就开始讲上篇文章中说的基础知识做一个小例子.     首先,我机子的数据库中有一张person表,如下图所示. 现在,我们用DataList控件将表中的信息显示出来,并可以在DataList控件上对数据库中的表进行编辑操作.     1.首先用vs创建web应用程序,添加web窗体,在web窗体内拉入DataList控件,右击控件,选择编辑项模板,在这里我们能看到四个模板,其中两个是Selected

ASP.NET数据绑定之DataList控件

DataList控件是.NET中的一个控件.DataList控件以表的形式呈现数据(在属性生成器中可以编辑),通过该控件,您可以使用不同的布局来显示数据记录(使用模板编辑),例如,将数据记录排成列或行的形式.您可以对 DataList控件进行配置,使用户能够编辑或删除表中的记录(使用EditItemTemplate模板和SelectedItemTemplate模板).DataList控件不使用数据源控件的数据修改功能,您必须自己提供此代码. 一.DataList 与 Repeater比较    

ASP.NET数据绑定控件详解

ListBox.GridView.Repeater这三个数据绑定控件的"高效分页",ListBox和GridView内置的有分页,但是其效率太低了,少量的数据还可以,大量的数据根本就没法用,Repeater控件本身不提供分页,但是在实际的开发中可能也会有用到分页,所以也会给大家讲一下,Repeater的分页. 好了,现在开始进入正题,先从比较常用的控件说起. 一.GridView控件 主要特点:支持删.改,排序.分页.外观设置.自定义显示数据 缺 点:影响程序性能.不支持插入操作 这个

通过RadioButton对DataList控件进行单选实例说明

本例实现通过RadioButton对DataList控件进行单选.你可以参考下面演示.  准备好一个星座对象,并定义好一个泛型List来存储每一个星座名称. 复制代码 代码如下: Constelltion.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// Summary description for Constellation //

ASP.NET 统计图表控件小结

1.OWC11 这个控件全称是:Office Web Component 11,是office2003中的一个组件,可惜的是office2007中没有了它的身影.不过安装office2003之后可以引用,然后使用.使用过的人都知道,就是它的效果要差一点. 2.dotnetCharting http://www.dotnetcharting.com/ dotnetcharting是国外的一个产品,是要收费的.具体还没有使用,后面在我尝试之后,我会添加一些使用范例.大家也可以上网搜索一下,很多的列子

asp.net fileupload控件上传图片并预览图片

本文为大家分享了fileupload控件实现上传图片后并进行预览图片的功能,并对web.config进行了配置,先看一下最终效果: 页面代码: <form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button1&quo

asp.net fileupload控件上传文件与多文件上传

1.前台文件 Default.aspx: <%@ Page Language="C#" AutoEventWireup="true"CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.

获取DataList控件的主键和索引实用图解

"哈哈,看了这篇http://www.jb51.net/article/33388.htm,只有效果,但没有结果,我怎样获取选择行的相关记录?" Insus.NET首先多谢网友对上面那篇博文的关注.解决你的问题,可以尝试获取选择行的索引或是主键即可,能获取到主键,其它字段的值,也可以获取到了. 下图中,高亮选择区,即是针对问题解决而在原在代码添加的部分.一是在DataList控件添加一个DataKeyField,以便获取到它的主键值,另外还添加了两个铵钮及一个Label标答,用来显示选