首页 > 编程语言 >C# .Net MVC Razor 视图静态分页导航栏生成器

C# .Net MVC Razor 视图静态分页导航栏生成器

时间:2022-11-03 22:32:49浏览次数:41  
标签:Razor pageIndex string pageCount href 生成器 视图 html Append


这里贴出3个重要组成部分

1.分页导航栏主算法代码(包括 @Html 扩展方法)

2.HTML 页面调用代码(包括导航栏样式)

3.Controller 控制器代码

4.测试路径:http://www.****.com/EBusiness/Paination/2?pc=10(这里只是个本机测试url实例,不同机子测试 域名部分(www.*****.com)需要替换一下)

   参数说明:pc(pageCount),总页数

   其中的 2 是:pageIndex ,当前页索引;使用的是默认路由也就是 {controller}/{action}/{id} 形式的路由定义

5.效果展示

C# .Net MVC Razor 视图静态分页导航栏生成器_c#

注:实现效果简单,如同学们有时间丰富一下配置参数,让其可设置性更强些。

      丰富完了帖回来我也用哈

------------------------------------------------------------------------------------------------------------------------------

1.分页导航栏主算法代码

using System;
using System.Text;
using System.Web.Mvc;namespace EB.Ctrl.Utility
{
#region Mvc 分页栏扩展方法
/// <summary>
/// Mvc 分页栏扩展方法
/// </summary>
public static class HtmlPaginationBar
{
/// <summary>
/// 生成分页栏(页面调用 @Html.PaginationBar)
/// </summary>
/// <param name="helper"></param>
/// <param name="bar">分页栏生成器</param>
/// <returns></returns>
public static MvcHtmlString PaginationBar(this HtmlHelper helper, PaginationBarBilder bar)
{
return new MvcHtmlString(bar.GenPaginationHtml());
}
} #endregion
#region 分页条参数
/// <summary>
/// 分页条参数
/// </summary>
public class PageBarPars
{
/// <summary>
/// 总页数
/// </summary>
public int PageCount { set; get; }
/// <summary>
/// 当前页索引
/// </summary>
public int PageIndex { set; get; }
}
#endregion #region 分页导航栏生成器
public class PaginationBarBilder
{
/// <summary>
/// 分页导航栏生成器
/// </summary>
/// <param name="url">页面地址模板,其中改变的页面索引部分使用{0}替换</param>
/// <param name="pageCount">总页数</param>
/// <param name="pageIndex">当前页索引</param>
public PaginationBarBilder(string url,int pageCount,int pageIndex)
{
m_url = url;
m_pageCount = pageCount;
m_pageIndex = pageIndex;
} private int m_pageIndex = 0;
private int m_pageCount = 0;
private string m_url = string.Empty;
private int m_offset = 3;
private StringBuilder m_html = new StringBuilder(); /// <summary>
/// 生成分页m_html代码
/// </summary>
/// <returns></returns>
public string GenPaginationHtml()
{
StringBuilder m_html = new StringBuilder();
m_html.Append("<div id='pagination'>");
m_html.Append(GenPrevious());
m_html.Append(GenLeftAnchor());
m_html.Append(GenMidArea());
m_html.Append(GenRightAnchor());
m_html.Append(GenNext());
m_html.Append("</div>");
return m_html.ToString();
}
/// <summary>
/// 生成上一页
/// </summary>
private string GenPrevious()
{
StringBuilder m_html = new StringBuilder();
string href = string.Empty;
if (m_pageIndex <= 0 || m_pageCount<=1)
{
m_html.Append("<span class='current prev'>前一页</span>");
return m_html.ToString();
}
href = string.Format(m_url, m_pageIndex-1);
m_html.Append(
string.Format("<a class='prev' href='{0}'>前一页</a>", href));
return m_html.ToString();
}
/// <summary>
/// 生成后一页
/// </summary>
private string GenNext()
{
StringBuilder m_html = new StringBuilder();
string href = string.Empty;
if (m_pageIndex >= m_pageCount-1)
{
m_html.Append("<span class='current next'>后一页</span>");
return m_html.ToString();
}
href = string.Format(m_url, ++m_pageIndex);
m_html.Append(
string.Format("<a class='prev' href='{0}'>后一页</a>", href));
return m_html.ToString();
}
/// <summary>
/// 左停靠连接
/// </summary>
private string GenLeftAnchor()
{
StringBuilder m_html = new StringBuilder();
string href = string.Empty;
if (m_pageIndex - m_offset > 0)
{
href = string.Format(m_url, 0);
m_html.Append(string.Format("<a href='{0}'>1</a>", href));
} if (m_pageIndex - m_offset > 1)
m_html.Append(string.Format("<span>...</span>"));

return m_html.ToString();
}
/// <summary>
/// 右停靠连接
/// </summary>
private string GenRightAnchor()
{
if (m_pageIndex + m_offset >= m_pageCount - 1)
return string.Empty; StringBuilder m_html = new StringBuilder();
string href = string.Empty; if (m_pageIndex + m_offset < m_pageCount-2)
m_html.Append(string.Format("<span>...</span>")); if (m_pageIndex+m_offset<m_pageCount)
{
href = string.Format(m_url, m_pageCount - 1);
m_html.Append(string.Format("<a href='{0}'>{1}</a>", href,m_pageCount));
} return m_html.ToString();
}
/// <summary>
/// 生成中间分页按钮部分
/// </summary>
private string GenMidArea()
{
StringBuilder m_html = new StringBuilder();
string href = string.Empty;
if (m_pageCount == 1)
{
m_html.Append("<span class='current'>1</span>");
return m_html.ToString();
}
Action<int> addHtml = (index =>
{
if (index == m_pageIndex)
{
href = string.Format("<span class='current'>{0}</span>", index+1);
m_html.Append(href);
return;
}
href = string.Format(m_url,index);
href = string.Format("<a href='{0}'>{1}</a>", href, index + 1);
m_html.Append(href);
}); int start = 0;
int end = 0;
if (m_pageIndex < m_offset)
{
start = 0;
if (m_offset + m_offset < m_pageCount)
end = m_offset + m_offset;
else
end = m_pageCount - 1;
}
else
{
start = m_pageIndex - m_offset;
if (m_pageIndex + m_offset >= m_pageCount)
end = m_pageCount-1;
else
end = m_pageIndex + m_offset;
} for (int i = 0; i < m_pageCount; i++)
{
if (i < start || i > end)
continue;
addHtml(i);
} return m_html.ToString();
}
}
#endregion
}

 

 

------------------------------------------------------------------------------------------------------------------------------

2.HTML 页面调用代码(包括导航栏样式)

@{
Layout = null;
}
@using EB.Ctrl.Utility;
<!DOCTYPE html><html>
<head>
<title>Paination</title>
<style>
#pagination{float:right} #pagination a {
text-decoration: none;
border: 1px solid #AAE;
color: #666;
}
#pagination a:hover {
BORDER-BOTTOM: #c00 1px solid; BORDER-LEFT: #c00 1px solid; BACKGROUND: #c00; COLOR: #fff; BORDER-TOP: #c00 1px solid; BORDER-RIGHT: #c00 1px solid; TEXT-DECORATION: none
}
#pagination a, #pagination span {
display: inline-block;
padding: 0.1em 0.4em;
margin-right: 5px;
margin-bottom: 5px;
} #pagination .current {
background: #bc0057;
color: #fff;
border: 1px solid #c00;
} #pagination .current.prev, #pagination .current.next{
color:#999;
border-color:#999;
background:#fff;
}
</style>
</head>
<body>
<!--使用这个扩展页面必须引用 using EB.Ctrl.Utility 命名空间-->
@Html.PaginationBar(new PaginationBarBilder("​​​http://www.****.com/EBusiness/Paination/{0}?pc​​​=" + this.ViewBag.PagePars.PageCount.ToString(), this.ViewBag.PagePars.PageCount, this.ViewBag.PagePars.PageIndex))
</body>
</html>

 

 

------------------------------------------------------------------------------------------------------------------------------

3.Controller 控制器代码

using System.Web.Mvc;
using EB.Ctrl.Utility;
using EB.Sys.Extension;namespace EB.Ctrl.Controllers
{
public class EBusinessController : Controller
{ public ActionResult Paination(string id,string pc)
{
PageBarPars pars = new PageBarPars();
pars.PageCount = pc.GetInt();
pars.PageIndex = id.GetInt();
this.ViewBag.PagePars = pars;
return View();
}
}
}


 

 

 

 

 

 

标签:Razor,pageIndex,string,pageCount,href,生成器,视图,html,Append
From: https://blog.51cto.com/xxjjing/5821276

相关文章

  • 对某一个视图类下的视图函数添加过滤
    对某一个视图类下的视图函数添加过滤djangoclassAView(GenericAPIView)#或者继承GenericViewSet filter_backends=[SearchFilter]search_fields=['name......
  • 一个简单的ID生成器,请帮忙看看还有那些毛病
    业务系统经常需要生成各种唯一ID,想到UUID、雪花算法等;UUID字符没有含义,掏出来给客户看,比较的很丑;雪花算法是64位的,小业务用户感觉太长了,有点不满意;琢磨了好些天,自己写了......
  • 05_greenplum定义数据库对象_序列_索引_视图
    一、创建和使用序列序列常用于新增记录时自动生成唯一标识符;1、创建序列使用CREATESEQUENCE命令来创建并初始化一个给定名称的单列序列表;例:CREATESEQUENCEmyserial......
  • 8.生成器
    1.什么是生成器?生成器是由一个函数和yield关键字创建出来的生成器最大的作用就是帮助我们节省内存空间比如,当我们需要使用一个1-100000的列表,遍历每一个数进行操作,我们首......
  • javascript异步编程之generator(生成器函数)与asnyc/await语法糖
    Generator异步方案相比于传统回调函数的方式处理异步调用,​​Promise​​最大的优势就是可以链式调用解决回调嵌套的问题。但是这样写依然会有大量的回调函数,虽然他们之间......
  • javascript异步编程之generator(生成器函数)与asnyc/await语法糖
    Generator异步方案相比于传统回调函数的方式处理异步调用,Promise最大的优势就是可以链式调用解决回调嵌套的问题。但是这样写依然会有大量的回调函数,虽然他们之间没有嵌......
  • UI动画练习 - CABasicAnimation:视图绕X/Y轴旋转(3D效果)
    视图3D旋转1-代码示例:以绕X轴旋转为例1#import"ViewController.h"2@interfaceViewController()3@property(strong,nonatomic)UIImageView*logoIV;4......
  • MyBatis-Plus 的代码生成器AutoGenerator
    ==========================================================//导入依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</......
  • Oracle 19C学习 - 16. 视图
    视图是什么视图几乎在所有的数据库软件中都存在。视图是在逻辑上代表一个或者多个表的数据子集,和同义词一样,都是映射关系,视图的功能和地位高于同义词。为什么使用视图......
  • Python 生成器
    什么是生成器:生成器是Python中的一个对象(按照某种规律,来生成元素的对象),生成器不是列表,保存了产生元素的算法,同时会记录游标的位置(现在拿到第几个元素了),为了下次继续拿......