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

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

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

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

3.Controller 控制器代码

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

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

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

5.效果展示

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

丰富完了帖回来我也用哈

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

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

using System;
using System.Text;
using System.Web.Mvc;

namespace EB.Ctrl.Utility
{
#region Mvc 分页栏扩展方法
///


/// Mvc 分页栏扩展方法
///

public static class HtmlPaginationBar
{
///
/// 生成分页栏(页面调用 @Html.PaginationBar)
///

///
/// 分页栏生成器
///
public static MvcHtmlString PaginationBar(this HtmlHelper helper, PaginationBarBilder bar)
{
return new MvcHtmlString(bar.GenPaginationHtml());
}
}

#endregion

#region 分页条参数
///


/// 分页条参数
///

public class PageBarPars
{
///
/// 总页数
///

public int PageCount { set; get; }
///
/// 当前页索引
///

public int PageIndex { set; get; }
}
#endregion

#region 分页导航栏生成器
public class PaginationBarBilder
{
///


/// 分页导航栏生成器
///

/// 页面地址模板,其中改变的页面索引部分使用{0}替换
/// 总页数
/// 当前页索引
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();

///


/// 生成分页m_html代码
///

///
public string GenPaginationHtml()
{
StringBuilder m_html = new StringBuilder();
m_html.Append("");
return m_html.ToString();
}
///
/// 生成上一页
///

private string GenPrevious()
{
StringBuilder m_html = new StringBuilder();
string href = string.Empty;
if (m_pageIndex <= 0 || m_pageCount<=1)
{
m_html.Append("前一页");
return m_html.ToString();
}
href = string.Format(m_url, m_pageIndex-1);
m_html.Append(
string.Format("", href));
return m_html.ToString();
}
///
/// 生成后一页
///

private string GenNext()
{
StringBuilder m_html = new StringBuilder();
string href = string.Empty;
if (m_pageIndex >= m_pageCount-1)
{
m_html.Append("后一页");
return m_html.ToString();
}
href = string.Format(m_url, ++m_pageIndex);
m_html.Append(
string.Format("", href));
return m_html.ToString();
}
///
/// 左停靠连接
///

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("1", href));
}

if (m_pageIndex - m_offset > 1)
m_html.Append(string.Format("..."));

return m_html.ToString();
}
///


/// 右停靠连接
///

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("..."));

if (m_pageIndex+m_offset {
href = string.Format(m_url, m_pageCount - 1);
m_html.Append(string.Format("{1}", href,m_pageCount));
}

return m_html.ToString();
}
///


/// 生成中间分页按钮部分
///

private string GenMidArea()
{
StringBuilder m_html = new StringBuilder();
string href = string.Empty;
if (m_pageCount == 1)
{
m_html.Append("1");
return m_html.ToString();
}
Action addHtml = (index =>
{
if (index == m_pageIndex)
{
href = string.Format("{0}", index+1);
m_html.Append(href);
return;
}
href = string.Format(m_url,index);
href = string.Format("{1}", 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;



Paination




@Html.PaginationBar(new PaginationBarBilder("http://www.iqingcao.com/EBusiness/Paination/{0}?pc=" + this.ViewBag.PagePars.PageCount.ToString(), this.ViewBag.PagePars.PageCount, this.ViewBag.PagePars.PageIndex))


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

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();
}
}
}

转载保留:http://www.iqingcao.com| http://blog.csdn.net/xxj_jing/article/details/7899125

你可能感兴趣的:(C# .Net MVC Razor 视图静态分页导航栏生成器)