网络编程 
首页 > 网络编程 > 浏览文章

MVC HtmlHelper扩展类(PagingHelper)实现分页功能

(编辑:jimmy 日期: 2024/11/3 浏览:3 次 )

MVC HtmlHelper扩展类PagingHelper实现分页功能,供大家参考,具体内容如下

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace HtmlHelperMvc.Models
{
 /// <summary>
 /// 分页类如果一个页面显示两个列表只需要复制该类到项目中重命名一个就可以
 /// </summary>
 public static class PagingHelper
 {
  #region 属性Property
  /// <summary>
  /// 当前页码
  /// </summary>
  private static int".class值").live("click", function () {
  /// var page = $(this).attr("pagingParamName值");
  /// $("#order").html("").load("/Customer/Order"+page);
  /// });live自动给遍历增加事件
  /// </summary>
  /// <param name="html"></param>
  /// <param name="htmlAttributes">new {@class="grey",pagingParamName="page",href="/Admin/Product/Index" rel="external nofollow" } pagingParamName默认page,匿名类添加控件属性</param>
  /// <returns></returns>
  public static MvcHtmlString Paging(this System.Web.Mvc.HtmlHelper html, object htmlAttributes)
  {
   RouteValueDictionary values = new RouteValueDictionary(htmlAttributes);
   #region 属性赋值
   if (values["href"] != null)
   {
    PagingUrl = values["href"].ToString();
   }
   if (values["pagingParamName"] != null)
   {
    PagingParamName = values["pagingParamName"].ToString();
    values.Remove("pagingParamName");
   }
   else
   {
    PagingParamName = "page";
   }
   #endregion
   #region 分页最外层div/span
   TagBuilder builder = new TagBuilder("div");//span
   //创建Id,注意要先设置IdAttributeDotReplacement属性后再执行GenerateId方法. 
   //builder.IdAttributeDotReplacement = "_";
   //builder.GenerateId(id);
   //builder.AddCssClass("");
   //builder.MergeAttributes(values);
   builder.InnerHtml = PagingBuilder(values);
   #endregion
   return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));//解决直接显示html标记
  }
  private static string PagingBuilder(RouteValueDictionary values)
  {
   #region 条件搜索时包括其他参数
   StringBuilder urlParameter = new StringBuilder();
   NameValueCollection collection = HttpContext.Current.Request.QueryString;
   string[] keys = collection.AllKeys;
   for (int i = 0; i < keys.Length; i++)
   {
    if (keys[i].ToLower() != "page")
    {
     urlParameter.AppendFormat("&{0}={1}", keys[i], collection[keys[i]]);
    }
   }
   #endregion
   //CurrentPage = Convert.ToInt32(HttpContext.Current.Request.QueryString["page"] "0");
   StringBuilder sb = new StringBuilder();
   #region 分页统计
   sb.AppendFormat("Total &nbsp;{0} &nbsp; Records Page &nbsp;{1} of &nbsp;{2} &nbsp; ", TotalCount, CurrentPage, TotalPages);
   #endregion
   #region 首页 上一页
   sb.AppendFormat(TagBuilder(values, 1, " First"));
   //sb.AppendFormat("<a href={0}",url,urlParameter);
   if (HasPreviousPage)
   {
    sb.AppendFormat(TagBuilder(values, CurrentPage - 1, " Prev "));
    //sb.AppendFormat("<a href={0}", url, CurrentPage - 1, urlParameter);
   }
   #endregion
   #region 分页逻辑
   if (TotalPages > 10)
   {
    if ((CurrentPage + 5) < TotalPages)
    {
     if (CurrentPage > 5)
     {
      for (int i = CurrentPage - 5; i <= CurrentPage + 5; i++)
      {
       sb.Append(TagBuilder(values, i, i.ToString()));
      }
     }
     else
     {
      for (int i = 1; i <= 10; i++)
      {
       sb.Append(TagBuilder(values, i, i.ToString()));
      }
     }
     sb.Append("...&nbsp;");
    }
    else
    {
     for (int i = CurrentPage - 10; i <= TotalPages; i++)
     {
      sb.Append(TagBuilder(values, i, i.ToString()));
     }
    }
   }
   else
   {
    for (int i = 1; i <= TotalPages; i++)
    {
     sb.Append("&nbsp;" + TagBuilder(values, i, i.ToString()) + "&nbsp");
    }
   }
   #endregion
   #region 下一页 末页
   if (HasNextPage)
   {
    sb.AppendFormat(TagBuilder(values, CurrentPage + 1, "Next"));
    //sb.AppendFormat("<a href={0}", url, CurrentPage + 1, urlParameter);
   }
   sb.AppendFormat(TagBuilder(values, TotalPages, "Last"));
   //sb.AppendFormat("<a href={0}",url,TotalPages,urlParameter);
   #endregion
   return sb.ToString();
  }
  private static string TagBuilder(RouteValueDictionary values, int i, string innerText)
  {
   values[PagingParamName] = i;
   TagBuilder tag = new TagBuilder("a");
   if (PagingUrl != null)
   {
    values["href"] = PagingUrl + "" + PagingParamName + "= " + i + "&nbsp;&nbsp;&nbsp;";
   }
   if (CurrentPage == i && innerText != " First" && innerText != " Last")
   {
    values["id"] = "on";
   }
   else
   {
    tag.Attributes["id"] = "";
   }
   tag.MergeAttributes(values);
   tag.SetInnerText(innerText);
   return tag.ToString();
  }
  #endregion
 }
}

后台Controller代码

//
// GET: /Home/

public ActionResult Index(int"htmlcode">
@{
 ViewBag.Title = "Index";
}
@using HtmlHelperMvc.Models;
<h2>Index</h2>
<hr />
<style type="text/css">
 #on
 {
  color: #FFF;
  background-color: #337AB7;
  border-color: #337AB7;
 }

 .pagination a
 {
  margin-right: 3px;
  padding: 5px 10px;
  font-size: 12px;
  text-decoration: none;
  background-color: #fff;
  border: 1px solid #ddd;
  cursor: pointer;
  display: inline-block;
  border-radius: 3px;
 }

 a
 {
  color: #337ab7;
  text-decoration: none;
 }

 a
 {
  background-color: transparent;
 }

 *
 {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
 }
</style>
<script src="/UploadFiles/2021-04-02/jquery-1.8.2.js">

最终效果图:

MVC HtmlHelper扩展类(PagingHelper)实现分页功能

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

上一篇:详解ASP.NET Core部署项目到Ubuntu Server
下一篇:asp.net利用母版制作页脚效果
在去年的5月23日,借助Intel Bridge Technology以及Intel Celadon两项技术的驱动,Intel为PC用户带来了Android On Windows(AOW)平台,并携手国内软件公司腾讯共同推出了腾讯应用宝电脑版,将Windows与安卓两大生态进行了融合,PC的使用体验随即被带入到了一个全新的阶段。