非常实用分页控件

/******************************************************
FileName:分页控件
create Date: 2008-5-18
description: 暂不支持Postback
*使用方式:
* 拖拽控件到页面上
* Pager的默认分页方式为页面跳转,设置PageKey属性为你所用的分页QueryString Key,默认值为page,在一个页面上的多个模块使用分页控件时请注意区分各模块的PageKey属性
* 选择分页方式为JS时,请设置FunctionName属性,此为分页按钮所要调用的js函数名,包含一个页号参数(或更多,但第一个参数为页号),默认为page
* 在代码里调用Pager1.SetPager(总记录数,总页数,当前页)来设置分页控件
Rewriter:
Rewrite Date:
******************************************************/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing.Design;
using System.Web.UI.Design;
using System.IO;
using System.Text.RegularExpressions;

/*嵌入资源*/
[assembly: WebResource("Byecity2011.WebSite.Utils.Component.Images.first.gif", "image/gif")]
[assembly: WebResource("Byecity2011.WebSite.Utils.Component.Images.prev.gif", "image/gif")]
[assembly: WebResource("Byecity2011.WebSite.Utils.Component.Images.next.gif", "image/gif")]
[assembly: WebResource("Byecity2011.WebSite.Utils.Component.Images.last.gif", "image/gif")]
[assembly: WebResource("Byecity2011.WebSite.Utils.Component.Css.Style.css", "text/css")]
namespace Byecity2011.WebSite.Utils
{
#region [枚举]

#region [分页类型枚举]
/// <summary>
/// 分页类型,暂不支持Postback
/// </summary>
public enum PagerType
{
/// <summary>
/// 用于调用js的分页function,应用于ajax
/// </summary>
JS,
/// <summary>
/// 用于使用地址重定向
/// </summary>
Navigate
}
#endregion

#region [控件的位置枚举]

/// <summary>
/// 控件的位置
/// </summary>
public enum Position
{
/// <summary>
/// 居左
/// </summary>
Left,

/// <summary>
/// 居中
/// </summary>
Center,

/// <summary>
/// 居右
/// </summary>
Right
}

#endregion

#endregion

/// <summary>
/// 分页控件
/// </summary>
[DefaultProperty("PagerType")]
[ToolboxData("<!--使用PagerType.Navigate时,请指定PageKey属性;使用PagerType.JS时,请指定要调用的js函数名FunctionName属性-->\r\n<{0}:Pager runat=server></{0}:Pager>")]
[Designer( typeof(PagerDesigner) )]
public class Pager : WebControl
{

#region [分页设置属性]
bool _SEOPager = false;
[Browsable(true)]
[Category("是否SEO伪静态分布")]
[Description("最后一个 '-' 后的数字为分页号")]
public bool SEOPager
{
get { return _SEOPager; }
set { _SEOPager = value; }
}

bool _FirstPageContainPageNumber = false;
[Browsable(true)]
[Category("是否SEO伪静态分布")]
[Description("第一页是否包含分页号")]
public bool FirstPageContainPageNumber
{
get { return _FirstPageContainPageNumber; }
set { _FirstPageContainPageNumber = value; }
}

private PagerType pagerType = PagerType.Navigate;
/// <summary>
/// 分类类型
/// 使用PagerType.Navigate时,请指定PageKey属性
/// 使用PagerType.JS时,请指定要调用的js函数名FunctionName属性
/// </summary>
[Browsable(true)]
[Category("分页设置")]
[Description("分类类型\r\n使用PagerType.Navigate时,请指定PageKey属性;使用PagerType.JS时,请指定要调用的js函数名FunctionName属性")]
public PagerType PagerType
{
get { return pagerType; }
set { pagerType = value; }
}
private string pageKey = "page";

/// <summary>
/// 使用PagerType.Navigate时,使用的QueryStringKey
/// </summary>
[Browsable(true)]
[Category("分页设置")]
[DefaultValue("page")]
[Description("使用PagerType.Navigate时,使用的QueryStringKey")]
public string PageKey
{
get { return pageKey; }
set
{
if (value.Length > 0)
pageKey = value;
}
}

private string functionName = "Page";
/// <summary>
/// 使用PagerType.JS时,使用时调用的js函数名
/// </summary>
[Browsable(true)]
[Category("分页设置")]
[DefaultValue("Page")]
[Description("使用PagerType.JS时,使用时调用的js函数名")]
public string FunctionName
{
get { return functionName; }
set
{
if (value.Length > 0)
functionName = value;
}
}

private int numberButtonCount = 10;
/// <summary>
/// 要显示的数字按钮数量,默认10
/// </summary>
[Browsable(true)]
[Category("分页设置")]
[DefaultValue("10")]
[Description("要显示的数字按钮数量,默认10")]
public int NumberButtonCount
{
get { return numberButtonCount; }
set
{
if (value > 0)
numberButtonCount = value;
}
}

#endregion

#region [控件样式属性]

private string divClass = "divContainer";
/// <summary>
/// 最外层对象的css
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("divContainer")]
[Description("最外层对象的css")]
public string DivClass
{
get { return divClass; }
set { divClass = value; }
}

private string tableClass = "divContainer_table";
/// <summary>
/// table的css
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("divContainer_table")]
[Description("table的css")]
public string TableClass
{
get { return tableClass; }
set { tableClass = value; }
}

private string pagerInfoClass = "Pager_td_0";
/// <summary>
/// 分页信息样式
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("Pager_td_0")]
[Description("分页信息样式")]
public string PagerInfoClass
{
get { return pagerInfoClass; }
set { pagerInfoClass = value; }
}

private string imageButtonClass = "btnImage";
/// <summary>
/// 图片按钮的样式
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("btnImage")]
[Description("图片按钮的样式")]
public string ImageButtonClass
{
get { return imageButtonClass; }
set { imageButtonClass = value; }
}

private string numberButtonClass = "btnNumber";
/// <summary>
/// 数字按钮的样式
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("btnNumber")]
[Description("数字按钮的样式")]
public string NumberButtonClass
{
get { return numberButtonClass; }
set { numberButtonClass = value; }
}

private string currentNumberButtonClass = "btnNumberCurrent";
/// <summary>
/// 当前数字按钮的样式
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("btnNumberCurrent")]
[Description("当前数字按钮的样式")]
public string CurrentNumberButtonClass
{
get { return currentNumberButtonClass; }
set { currentNumberButtonClass = value; }
}

private string numberInputClass = "Pager_td_input";
/// <summary>
/// 输入跳转的样式
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("Pager_td_input")]
[Description("输入跳转的样式")]
public string NumberInputClass
{
get { return numberInputClass; }
set { numberInputClass = value; }
}

#endregion

#region [按钮显示属性]

private bool showHeadEndButton = true;
/// <summary>
/// 是否显示首页、上一页、下一页,末页按钮
/// </summary>
[Browsable(true)]
[Category("按钮显示")]
[DefaultValue("true")]
[Description("是否显示首页、上一页、下一页,末页按钮")]
public bool ShowHeadEndButton
{
get { return showHeadEndButton; }
set { showHeadEndButton = value; }
}

private bool showUserInput = false;
/// <summary>
/// 是否显示用户输入按钮
/// </summary>
[Browsable(true)]
[Category("按钮显示")]
[DefaultValue("false")]
[Description("是否显示用户输入按钮")]
public bool ShowUserInput
{
get { return showUserInput; }
set { showUserInput = value; }
}

private bool showNumberButton = true;
/// <summary>
/// 是否显示页码按钮
/// </summary>
[Browsable(true)]
[Category("按钮显示")]
[DefaultValue("true")]
[Description("是否显示页码按钮")]
public bool ShowNumberButton
{
get { return showNumberButton; }
set { showNumberButton = value; }
}

private bool showPageInfo = true;
/// <summary>
/// 是否显示分页信息
/// </summary>
[Browsable(true)]
[Category("按钮显示")]
[DefaultValue("true")]
[Description("是否显示分页信息")]
public bool ShowPageInfo
{
get { return showPageInfo; }
set { showPageInfo = value; }
}

private Position pagerPosition = Position.Left;
/// <summary>
/// 分页控件的位置
/// </summary>
[Browsable(true)]
[Category("控件位置")]
[DefaultValue("Left")]
[Description("分页控件的位置,左,中,右")]
public Position PagerPosition
{
get { return pagerPosition; }
set { pagerPosition = value; }
}

#endregion

#region [按钮图片]

private string firstImage = "";
/// <summary>
/// "首页"图片地址
/// </summary>
[Browsable(true)]
[Category("按钮图片")]
[DefaultValue("")]
[Description("\"首页\"图片地址")]
[Editor(typeof(UrlEditor), typeof(UITypeEditor))]
public string FristImageUrl
{
get { return firstImage; }
set { firstImage = value; }
}

private string prevImage = "";
/// <summary>
/// "上一页"图片地址
/// </summary>
[Browsable(true)]
[Category("按钮图片")]
[DefaultValue("")]
[Description("\"上一页\"图片地址")]
[Editor(typeof(UrlEditor), typeof(UITypeEditor))]
public string PrevImageUrl
{
get { return prevImage; }
set { prevImage = value; }
}

private string nextImage = "";
/// <summary>
/// "首页"图片地址
/// </summary>
[Browsable(true)]
[Category("按钮图片")]
[DefaultValue("")]
[Description("\"下一页\"图片地址")]
[Editor(typeof(UrlEditor), typeof(UITypeEditor))]
public string NextImageUrl
{
get { return nextImage; }
set { nextImage = value; }
}

private string lastImage = "";
/// <summary>
/// "末页"图片地址
/// </summary>
[Browsable(true)]
[Category("按钮图片")]
[DefaultValue("")]
[Description("\"末页\"图片地址")]
[Editor( typeof(UrlEditor), typeof(UITypeEditor) )]
public string LastImageUrl
{
get { return lastImage; }
set { lastImage = value; }
}


#endregion
public string UserInputID
{
get { return this.UniqueID + "_userInput"; }
}
private int _pageCount;
public int PageCount
{
get { return _pageCount; }
}

private string urlFormat = "";
public string UrlFormatString
{
get
{
if (urlFormat == "")
{
string url = System.Web.HttpContext.Current.Request.RawUrl.ToLower();
string[] keys = System.Web.HttpContext.Current.Request.QueryString.AllKeys;

foreach (string key in keys)
{
if (key.ToLower() == this.PageKey.ToLower())
{
return url.Replace(string.Format("{0}={1}", key.ToLower(), System.Web.HttpContext.Current.Request.QueryString[key]), string.Format("{0}={1}", key.ToLower(), "{0}"));
}
}

urlFormat = string.Format("{0}{1}{2}={3}", url, url.IndexOf('?') > 0 ? "&" : "?", this.PageKey.ToLower(), "{0}");
}
return urlFormat;
}
}
#region [初始化时]

/// <summary>
/// 初始化时
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)
{
//注册样式
if (Page.Header != null)
{
//引用样式表文件
System.Web.UI.HtmlControls.HtmlLink link = new System.Web.UI.HtmlControls.HtmlLink();
link.Attributes.Add("rel", "stylesheet");
link.Attributes.Add("type", "text/css");
link.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl(typeof(Pager), "Byecity.Common.Utils.Component.Css.Style.css"));
Page.Header.Controls.Add(link);
}

//注册用户输入检查
if (this.ShowUserInput)
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "checkUserInput", "<script>\r\n"
+ "var pageCount\r\n"
+ "var urlFormatString = '" + this.UrlFormatString + "'\r\n"
+ string.Format("var pageType = {0}\r\n", this.PagerType == PagerType.Navigate ? 0 : 1)
+ string.Format("function {0}_checkInput(id)\r\n", this.UniqueID)
+ "{\r\n"
+ " var v = document.getElementById( id ).value;\r\n"
+ " if( v.length == 0 )\r\n"
+ " {\r\n"
+ " alert('请输入一个数');\r\n"
+ " document.getElementById( id ).focus();\r\n"
+ " return false;\r\n"
+ " }\r\n"
+ " for(var i=0;i<v.length;i++)\r\n"
+ " {\r\n"
+ " if( isNaN(v.charAt( i )) )\r\n"
+ " {\r\n"
+ " alert('请输入一个有效的数字');\r\n"
+ " document.getElementById( id ).focus();\r\n"
+ " return false;\r\n"
+ " }\r\n"
+ " }\r\n"
+ " if( parseInt( v ) <= 0)\r\n"
+ " {\r\n"
+ " alert('请输入大于0的数');\r\n"
+ " document.getElementById( id ).focus();\r\n"
+ " return false;\r\n"
+ " }\r\n"
+ " if( parseInt( v ) > pageCount )\r\n"
+ " {\r\n"
+ " alert('请输入一个不大于'+pageCount+'的数');\r\n"
+ " document.getElementById( id ).focus();\r\n"
+ " return false;\r\n"
+ " }\r\n"
+ " var u;\r\n"
+ " if(pageType==0){\r\n"
+ " if( parseInt( v ) == 1 )\r\n"
+ " u = urlFormatString.replace('_{0}','');\r\n"
+ " else\r\n"
+ " u = urlFormatString.replace('{0}',v);\r\n"
+ " document.location.href = u;\r\n"
+ " }\r\n"
+ " else{\r\n"
+ " " + this.FunctionName + "(v);\r\n"
+ " }\r\n"
+ "}\r\n"
+ "function " + this.UniqueID + "_inputFocus( el )\r\n"
+ "{\r\n"
+ " el.onkeydown = function(){\r\n"
+ " if( event.keyCode == 13 )\r\n"
+ " {\r\n"
+ " " + this.UniqueID + "_checkInput(el.id);\r\n"
+ " return false;\r\n"
+ " }\r\n"
+ " }\r\n"
+ " el.onblur = function(){\r\n"
+ " this.onkeydown = function(){ return true; }\r\n"
+ " }\r\n"
+ "}\r\n"
+ "</script>\r\n");
}

base.OnInit(e);
}

#endregion

private string html = "\r\n<div class='{0}' align='{1}'>\r\n<table class=\"{2}\">\r\n<tr>\r\n{3}\r\n{4}\r\n{5}</tr>\r\n</table>\r\n</div>\r\n";
private string pageInfo = "<td class='{2}'>\r\n <a class='Pager_td_0_a1'>共{0}条记录</a>\r\n <a class='Pager_td_0_a2'>{1}</a>\r\n</td>";//Pager_td_0
private string tdButton = "<td class='Pager_td_buttons'>\r\n{0}{1}{2}</td>\r\n";
private string tdNumberButton = "\r\n{0}\r\n";
private string tdUserInput = "<td class='{2}'>\r\n <input id='{0}' type=text class='Pager_td_input_input' οnfοcus='{1}'><a style='cursor:pointer' class='Pager_td_input_go' οnclick='{3}'>go</a>\r\n</td>";//Pager_td_input

/// <summary>
/// 输出控件
/// </summary>
/// <param name="output"></param>
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(html);
}

/// <summary>
/// 动态设置分页控件
/// </summary>
/// <param name="itemCount"></param>
/// <param name="pageCount"></param>
/// <param name="currentNO"></param>
public void SetPager(int itemCount, int pageCount, int currentNO)
{
_pageCount = pageCount;
Page.ClientScript.RegisterClientScriptBlock(GetType(), "PageCount", string.Format("<script> pageCount={0};</script>", pageCount));

if (this.NumberButtonCount > pageCount)
this.NumberButtonCount = pageCount;

StringBuilder sb = new StringBuilder();
string tmp = "";
string[] buttons;
string[] numberButtons;

// 数字按钮
if (ShowNumberButton)
{
if (this.NumberButtonCount > 0)
{
numberButtons = createNumberButton(currentNO, pageCount);
foreach (string btn in numberButtons)
{
sb.Append(btn);
}
tdNumberButton = string.Format(tdNumberButton, sb.ToString());
}
}

// 前后导航
if (ShowHeadEndButton)
{
buttons = createButton(currentNO, pageCount);
string s1 = buttons[0] + buttons[1];//head、prev
string s2 = buttons[2] + buttons[3];//next、end

tdButton = string.Format( tdButton,s1,ShowNumberButton ? tdNumberButton : "" ,s2 );
}

string pageInfoString = "";
if (this.ShowPageInfo)
{
pageInfoString = string.Format(pageInfo, itemCount, string.Format("第{0}页/共{1}页", currentNO, pageCount), this.PagerInfoClass.Length == 0 ? "Pager_td_0" : this.PagerInfoClass);
}
if( ShowHeadEndButton )
tmp = tdButton;
else if( !ShowHeadEndButton && ShowNumberButton)
tmp = tdNumberButton;
else
tmp = tdNumberButton;

string goString = "";
if (this.ShowUserInput)
{
string inputID = string.Format("{0}_userInput", this.UniqueID);
goString = string.Format(tdUserInput, inputID, string.Format("{0}_inputFocus(this)", this.UniqueID), this.NumberInputClass.Length == 0 ? "Pager_td_input" : this.NumberInputClass, string.Format("{0}_checkInput(\"{1}\")", this.UniqueID, inputID));
}

html = string.Format(html, this.DivClass, this.PagerPosition.ToString(), this.TableClass, pageInfoString, tmp, goString);
}

/// <summary>
/// 创建首页、上一页、下一页,末页按钮
/// </summary>
/// <param name="currentNO"></param>
/// <param name="pageCount"></param>
/// <returns></returns>
string[] createButton(int currentNO,int pageCount)
{
string[] images = new string[4];
string img = "<img border=0 class='_pager_mav_img' src='{0}'>";

images[0] = this.FristImageUrl.Length > 0 ? this.FristImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity2011.WebSite.Utils.Component.Images.first.gif"));
images[1] = this.PrevImageUrl.Length > 0 ? this.PrevImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity2011.WebSite.Utils.Component.Images.prev.gif"));
images[2] = this.NextImageUrl.Length > 0 ? this.NextImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity2011.WebSite.Utils.Component.Images.next.gif"));
images[3] = this.LastImageUrl.Length > 0 ? this.LastImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity2011.WebSite.Utils.Component.Images.last.gif"));

List<string> buttons = new List<string>();
string button;
string imageButtonCss = this.ImageButtonClass.Length == 0 ? "btnImage" : this.ImageButtonClass;
#region 设置前后导航

if (pageCount == 0 || pageCount == 1)
{
button = " ";
buttons.Add(button);

button = "";
buttons.Add(button);

button = "";
buttons.Add(button);

button = "";
buttons.Add(button);
}
else if (currentNO == 1 && currentNO != pageCount)
{
//第一页 && 不是最后一页
button = "";
buttons.Add(button);

button = "";
buttons.Add(button);
if (this.PagerType == PagerType.JS)
{
button = string.Format(" <a href='javascript:;' title='下一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO + 1, "&gt;下一页"/*images[2]*/, imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='javascript:;' title='最后一页' class='{3}' οnclick='{0}({1})'>{2}</a>", this.FunctionName, pageCount, "尾页"/*images[3]*/, imageButtonCss);
buttons.Add(button);
}
else
{
button = string.Format(" <a href='{0}' title='下一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO + 1), "&gt;下一页"/*images[2]*/, imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='{0}' title='最后一页' class='{2}' target='_self'>{1}</a>", this.CreateLink(pageCount), "尾页"/*images[3]*/, imageButtonCss);
buttons.Add(button);
}
}
else if (currentNO != 1 && currentNO == pageCount)
{
//不是第一页 && 最后一页
if (this.PagerType == PagerType.JS)
{
button = string.Format(" <a href='javascript:;' title='第一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, 1, "首页"/*images[0]*/, imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='javascript:;' title='上一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO - 1, "上一页&lt;"/*images[1]*/, imageButtonCss);
buttons.Add(button);
}
else
{
button = string.Format(" <a href='{0}' title='第一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(1), "首页"/*images[0]*/, imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='{0}' title='上一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO - 1), "上一页&lt;"/*images[1]*/, imageButtonCss);
buttons.Add(button);
}

button = "";
buttons.Add(button);

button = "";
buttons.Add(button);
}
else if (currentNO != 1 && currentNO != pageCount)
{
//不是第一页 && 不是最后一页
if (this.PagerType == PagerType.JS)
{

button = string.Format(" <a href='javascript:;' title='第一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, 1, "首页"/*images[0]*/, imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='javascript:;' title='上一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO - 1, "上一页&lt;"/*images[1]*/, imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='javascript:;' title='下一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO + 1, "&gt;下一页"/*images[2]*/, imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='javascript:;' title='最后一页' class='{3}' οnclick='{0}({1})'>{2}</a>", this.FunctionName, pageCount, "尾页"/*images[3]*/, imageButtonCss);
buttons.Add(button);
}
else
{
button = string.Format(" <a href='{0}' title='第一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(1), "首页"/*images[0]*/, imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='{0}' title='上一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO - 1), "上一页&lt;"/*images[1]*/, imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='{0}' title='下一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO + 1), "&gt;下一页"/*images[2]*/, imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='{0}' title='最后一页' class='{2}' target='_self'>{1}</a>", this.CreateLink(pageCount), "尾页"/*images[3]*/, imageButtonCss);
buttons.Add(button);
}
}
else
{
button = "";
buttons.Add(button);

button = "";
buttons.Add(button);

button = "";
buttons.Add(button);

button = "";
buttons.Add(button);
}

#endregion

return buttons.ToArray();
}

/// <summary>
/// 创建页码按钮
/// </summary>
/// <param name="currentNO">当前页码</param>
/// <param name="pageCount">显示页码数量</param>
/// <returns></returns>
string[] createNumberButton(int currentNO,int pageCount)
{
List<string> buttons = new List<string>();
string button;
int no, fromNO;

if ((currentNO + 4) <= this.NumberButtonCount)//currentNO + 4 在 1 到 linksCount-4 之间
{
fromNO = 1;
}
else if ((currentNO + 4) > this.NumberButtonCount && (currentNO + 4) <= pageCount) // currentNO + 4 在 linksCount-4 到 PageQty 之间
{
fromNO = currentNO - (this.NumberButtonCount - 5);
}
else //currentNO + 4 > PageQty
{
fromNO = pageCount - this.NumberButtonCount + 1;
}

for (int i = 1; i <= this.NumberButtonCount; i++)
{
no = fromNO + i - 1;

if (no == currentNO)
button = string.Format(" <a class='{1}'>{0}</a>\r\n", no, this.CurrentNumberButtonClass.Length == 0 ? "btnNumberCurrent" : this.CurrentNumberButtonClass);
else
{
if (this.PagerType == PagerType.JS)
button = string.Format(" <a href='javascript:;' title='第{2}页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, no, no, this.NumberButtonClass.Length == 0 ? "btnNumber" : this.NumberButtonClass);
else
button = string.Format(" <a href='{0}' title='第{2}页' class='{3}' target='_self'>{1}</a>\r\n", CreateLink(no), no, no, this.NumberButtonClass.Length == 0 ? "btnNumber" : this.NumberButtonClass);
}

buttons.Add(button);
}

return buttons.ToArray();
}

/// <summary>
/// 使用PagerType.Navigate时,用于生成按钮的链接地址
/// </summary>
/// <param name="no"></param>
/// <returns></returns>
string CreateLink(int no)
{
if( DesignMode )
return "#";

string url = System.Web.HttpContext.Current.Request.RawUrl.ToLower();

if ( !SEOPager )
{
string[] keys = System.Web.HttpContext.Current.Request.QueryString.AllKeys;

foreach ( string key in keys )
{
if ( key.ToLower() == this.PageKey.ToLower() )
{
return url.Replace( string.Format( "{0}={1}", key.ToLower(), System.Web.HttpContext.Current.Request.QueryString[key] ), string.Format( "{0}={1}", key.ToLower(), no ) );
}
}

return string.Format( "{0}{1}{2}={3}", url, url.IndexOf( '?' ) > 0 ? "&" : "?", this.PageKey.ToLower(), no );
}
else
{
string extention = "." + url.GetExtention();
string fileName = url.GetFileName();

string name;
if ( FirstPageContainPageNumber )
{
if ( fileName.LastIndexOf( '-' ) > 0 )
name = fileName.Substring( 0, fileName.LastIndexOf( '-' ) );
else
name = fileName;
}
else
name = fileName;

name = HttpUtility.UrlEncode( name );
string u = url.Substring( 0, url.LastIndexOf( '/' ) + 1 );

if ( no == 1 )
u = u + name + extention;
else
u = u + name + "-" + no.ToString() + extention;
return u;
}
}
}
/// <summary>
/// 分页控件
/// </summary>
[DefaultProperty("PagerType")]
[ToolboxData("<{0}:SeoPager runat=server></{0}:SeoPager>")]
[Designer( typeof(PagerDesigner) )]
public class SeoPager : WebControl
{

#region [分页设置属性]

private PagerType pagerType = PagerType.Navigate;
/// <summary>
/// 分类类型
/// 使用PagerType.Navigate时,请指定PageKey属性
/// 使用PagerType.JS时,请指定要调用的js函数名FunctionName属性
/// </summary>
[Browsable(true)]
[Category("分页设置")]
[Description("分类类型\r\n使用PagerType.Navigate时,请指定PageKey属性;使用PagerType.JS时,请指定要调用的js函数名FunctionName属性")]
public PagerType PagerType
{
get { return pagerType; }
set { pagerType = value; }
}

private string functionName = "Page";
/// <summary>
/// 使用PagerType.JS时,使用时调用的js函数名
/// </summary>
[Browsable(true)]
[Category("分页设置")]
[DefaultValue("Page")]
[Description("使用PagerType.JS时,使用时调用的js函数名")]
public string FunctionName
{
get { return functionName; }
set
{
if (value.Length > 0)
functionName = value;
}
}

private int numberButtonCount = 10;
/// <summary>
/// 要显示的数字按钮数量,默认10
/// </summary>
[Browsable(true)]
[Category("分页设置")]
[DefaultValue("10")]
[Description("要显示的数字按钮数量,默认10")]
public int NumberButtonCount
{
get { return numberButtonCount; }
set
{
if (value > 0)
numberButtonCount = value;
}
}

#endregion

#region [控件样式属性]

private string divClass = "divContainer";
/// <summary>
/// 最外层对象的css
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("divContainer")]
[Description("最外层对象的css")]
public string DivClass
{
get { return divClass; }
set { divClass = value; }
}

private string tableClass = "divContainer_table";
/// <summary>
/// table的css
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("divContainer_table")]
[Description("table的css")]
public string TableClass
{
get { return tableClass; }
set { tableClass = value; }
}

private string pagerInfoClass = "Pager_td_0";
/// <summary>
/// 分页信息样式
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("Pager_td_0")]
[Description("分页信息样式")]
public string PagerInfoClass
{
get { return pagerInfoClass; }
set { pagerInfoClass = value; }
}

private string imageButtonClass = "btnImage";
/// <summary>
/// 图片按钮的样式
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("btnImage")]
[Description("图片按钮的样式")]
public string ImageButtonClass
{
get { return imageButtonClass; }
set { imageButtonClass = value; }
}

private string numberButtonClass = "btnNumber";
/// <summary>
/// 数字按钮的样式
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("btnNumber")]
[Description("数字按钮的样式")]
public string NumberButtonClass
{
get { return numberButtonClass; }
set { numberButtonClass = value; }
}

private string currentNumberButtonClass = "btnNumberCurrent";
/// <summary>
/// 当前数字按钮的样式
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("btnNumberCurrent")]
[Description("当前数字按钮的样式")]
public string CurrentNumberButtonClass
{
get { return currentNumberButtonClass; }
set { currentNumberButtonClass = value; }
}

private string numberInputClass = "Pager_td_input";
/// <summary>
/// 输入跳转的样式
/// </summary>
[Browsable(true)]
[Category("控件样式")]
[DefaultValue("Pager_td_input")]
[Description("输入跳转的样式")]
public string NumberInputClass
{
get { return numberInputClass; }
set { numberInputClass = value; }
}

#endregion

#region [按钮显示属性]

private bool showHeadEndButton = true;
/// <summary>
/// 是否显示首页、上一页、下一页,末页按钮
/// </summary>
[Browsable(true)]
[Category("按钮显示")]
[DefaultValue("true")]
[Description("是否显示首页、上一页、下一页,末页按钮")]
public bool ShowHeadEndButton
{
get { return showHeadEndButton; }
set { showHeadEndButton = value; }
}

private bool showUserInput = false;
/// <summary>
/// 是否显示用户输入按钮
/// </summary>
[Browsable(true)]
[Category("按钮显示")]
[DefaultValue("false")]
[Description("是否显示用户输入按钮")]
public bool ShowUserInput
{
get { return showUserInput; }
set { showUserInput = value; }
}

private bool showNumberButton = true;
/// <summary>
/// 是否显示页码按钮
/// </summary>
[Browsable(true)]
[Category("按钮显示")]
[DefaultValue("true")]
[Description("是否显示页码按钮")]
public bool ShowNumberButton
{
get { return showNumberButton; }
set { showNumberButton = value; }
}

private bool showPageInfo = true;
/// <summary>
/// 是否显示分页信息
/// </summary>
[Browsable(true)]
[Category("按钮显示")]
[DefaultValue("true")]
[Description("是否显示分页信息")]
public bool ShowPageInfo
{
get { return showPageInfo; }
set { showPageInfo = value; }
}

private Position pagerPosition = Position.Left;
/// <summary>
/// 分页控件的位置
/// </summary>
[Browsable(true)]
[Category("控件位置")]
[DefaultValue("Left")]
[Description("分页控件的位置,左,中,右")]
public Position PagerPosition
{
get { return pagerPosition; }
set { pagerPosition = value; }
}

#endregion

#region [按钮图片]

private string firstImage = "";
/// <summary>
/// "首页"图片地址
/// </summary>
[Browsable(true)]
[Category("按钮图片")]
[DefaultValue("")]
[Description("\"首页\"图片地址")]
[Editor(typeof(UrlEditor), typeof(UITypeEditor))]
public string FristImageUrl
{
get { return firstImage; }
set { firstImage = value; }
}

private string prevImage = "";
/// <summary>
/// "上一页"图片地址
/// </summary>
[Browsable(true)]
[Category("按钮图片")]
[DefaultValue("")]
[Description("\"上一页\"图片地址")]
[Editor(typeof(UrlEditor), typeof(UITypeEditor))]
public string PrevImageUrl
{
get { return prevImage; }
set { prevImage = value; }
}

private string nextImage = "";
/// <summary>
/// "首页"图片地址
/// </summary>
[Browsable(true)]
[Category("按钮图片")]
[DefaultValue("")]
[Description("\"下一页\"图片地址")]
[Editor(typeof(UrlEditor), typeof(UITypeEditor))]
public string NextImageUrl
{
get { return nextImage; }
set { nextImage = value; }
}

private string lastImage = "";
/// <summary>
/// "末页"图片地址
/// </summary>
[Browsable(true)]
[Category("按钮图片")]
[DefaultValue("")]
[Description("\"末页\"图片地址")]
[Editor( typeof(UrlEditor), typeof(UITypeEditor) )]
public string LastImageUrl
{
get { return lastImage; }
set { lastImage = value; }
}


#endregion

public string UserInputID
{
get { return this.UniqueID + "_userInput"; }
}
private int _pageCount;
public int PageCount
{
get { return _pageCount; }
}

private string urlFormat = "";
public string UrlFormatString
{
get
{
if (urlFormat == "")
{
string url = System.Web.HttpContext.Current.Request.RawUrl.ToLower();
string extention = System.IO.Path.GetExtension(url);
string fileName = System.IO.Path.GetFileNameWithoutExtension(url);

string name;
if (fileName.LastIndexOf('_') > 0)
name = fileName.Substring(0, fileName.LastIndexOf('_'));
else
name = fileName;

string u = url.Substring(0, url.LastIndexOf('/') + 1);

urlFormat = u + name + "_{0}" + extention;
}
return urlFormat;
}
}
#region [初始化时]

/// <summary>
/// 初始化时
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)
{
//注册样式
if (Page.Header != null)
{
//引用样式表文件
System.Web.UI.HtmlControls.HtmlLink link = new System.Web.UI.HtmlControls.HtmlLink();
link.Attributes.Add("rel", "stylesheet");
link.Attributes.Add("type", "text/css");
link.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl(typeof(SeoPager), "Byecity.Information.Web.Component.Css.Style.css"));
//Page.Header.Controls.Add(link);
}

//注册用户输入检查
if (this.ShowUserInput)
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "checkUserInput", "<script>\r\n"
+ "var pageCount\r\n"
+ "var urlFormatString = '"+ this.UrlFormatString +"'\r\n"
+ string.Format("var pageType = {0}\r\n",this.PagerType == PagerType.Navigate ? 0 : 1)
+ string.Format("function {0}_checkInput(id)\r\n", this.UniqueID)
+ "{\r\n"
+ " var v = document.getElementById( id ).value;\r\n"
+ " if( v.length == 0 )\r\n"
+ " {\r\n"
+ " alert('请输入一个数');\r\n"
+ " document.getElementById( id ).focus();\r\n"
+ " return false;\r\n"
+ " }\r\n"
+ " for(var i=0;i<v.length;i++)\r\n"
+ " {\r\n"
+ " if( isNaN(v.charAt( i )) )\r\n"
+ " {\r\n"
+ " alert('请输入一个有效的数字');\r\n"
+ " document.getElementById( id ).focus();\r\n"
+ " return false;\r\n"
+ " }\r\n"
+ " }\r\n"
+ " if( parseInt( v ) <= 0)\r\n"
+ " {\r\n"
+ " alert('请输入大于0的数');\r\n"
+ " document.getElementById( id ).focus();\r\n"
+ " return false;\r\n"
+ " }\r\n"
+ " if( parseInt( v ) > pageCount )\r\n"
+ " {\r\n"
+ " alert('请输入一个不大于'+pageCount+'的数');\r\n"
+ " document.getElementById( id ).focus();\r\n"
+ " return false;\r\n"
+ " }\r\n"
+ " var u;\r\n"
+ " if(pageType==0){\r\n"
+ " if( parseInt( v ) == 1 )\r\n"
+ " u = urlFormatString.replace('_{0}','');\r\n"
+ " else\r\n"
+ " u = urlFormatString.replace('{0}',v);\r\n"
+ " document.location.href = u;\r\n"
+ " }\r\n"
+ " else{\r\n"
+ " " + this.FunctionName + "(v);\r\n"
+ " }\r\n"
+ "}\r\n"
+ "function " + this.UniqueID + "_inputFocus( el )\r\n"
+ "{\r\n"
+ " el.onkeydown = function(){\r\n"
+ " if( event.keyCode == 13 )\r\n"
+ " {\r\n"
+ " " + this.UniqueID + "_checkInput(el.id);\r\n"
+ " return false;\r\n"
+ " }\r\n"
+ " }\r\n"
+ " el.onblur = function(){\r\n"
+ " this.onkeydown = function(){ return true; }\r\n"
+ " }\r\n"
+ "}\r\n"
+ "</script>\r\n");

}

base.OnInit(e);
}

#endregion

private string html = "\r\n<div class='{0}' align='{1}'>\r\n<table class=\"{2}\">\r\n<tr>\r\n{3}\r\n{4}\r\n{5}</tr>\r\n</table>\r\n</div>\r\n";
private string pageInfo = "<td class='{2}'>\r\n <a class='Pager_td_0_a1'>{0}</a>\r\n <a class='Pager_td_0_a2'>{1}</a>\r\n</td>";//Pager_td_0
private string tdButton = "<td class='Pager_td_buttons'>\r\n{0}{1}{2}</td>\r\n";
private string tdNumberButton = "\r\n{0}\r\n";
private string tdUserInput = "<td class='{2}'>\r\n <input id='{0}' type=text class='Pager_td_input_input' οnfοcus='{1}'><a style='cursor:pointer' class='Pager_td_input_go' οnclick='{3}'>go</a>\r\n</td>";//Pager_td_input

/// <summary>
/// 输出控件
/// </summary>
/// <param name="output"></param>
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(html);
}

/// <summary>
/// 动态设置分页控件
/// </summary>
/// <param name="itemCount"></param>
/// <param name="pageCount"></param>
/// <param name="currentNO"></param>
public void SetPager(int itemCount, int pageCount, int currentNO)
{
_pageCount = pageCount;
Page.ClientScript.RegisterClientScriptBlock(GetType(), "PageCount", string.Format("<script> pageCount={0};</script>", pageCount));
if (this.NumberButtonCount > pageCount)
this.NumberButtonCount = pageCount;

StringBuilder sb = new StringBuilder();
string tmp = "";
string[] buttons;
string[] numberButtons;

// 数字按钮
if (ShowNumberButton)
{
if (this.NumberButtonCount > 0)
{
numberButtons = createNumberButton(currentNO, pageCount);
foreach (string btn in numberButtons)
{
sb.Append(btn);
}
tdNumberButton = string.Format(tdNumberButton, sb.ToString());
}
}

// 前后导航
if (ShowHeadEndButton)
{
buttons = createButton(currentNO, pageCount);
string s1 = buttons[0] + buttons[1];//head、prev
string s2 = buttons[2] + buttons[3];//next、end

tdButton = string.Format( tdButton,s1,ShowNumberButton ? tdNumberButton : "" ,s2 );
}

string pageInfoString = "";
if (this.ShowPageInfo)
{
pageInfoString = string.Format(pageInfo, itemCount, string.Format("{0}/{1}", currentNO, pageCount), this.PagerInfoClass.Length == 0 ? "Pager_td_0" : this.PagerInfoClass);
}
if( ShowHeadEndButton )
tmp = tdButton;
else if( !ShowHeadEndButton && ShowNumberButton)
tmp = tdNumberButton;
else
tmp = tdNumberButton;

string goString = "";
if (this.ShowUserInput)
{
string inputID = string.Format("{0}_userInput", this.UniqueID);
goString = string.Format(tdUserInput, inputID, string.Format("{0}_inputFocus(this)", this.UniqueID), this.NumberInputClass.Length == 0 ? "Pager_td_input" : this.NumberInputClass, string.Format("{0}_checkInput(\"{1}\")", this.UniqueID, inputID));
}

html = string.Format(html, this.DivClass, this.PagerPosition.ToString(), this.TableClass, pageInfoString, tmp, goString);
}

/// <summary>
/// 创建首页、上一页、下一页,末页按钮
/// </summary>
/// <param name="currentNO"></param>
/// <param name="pageCount"></param>
/// <returns></returns>
string[] createButton(int currentNO,int pageCount)
{
string[] images = new string[4];
string img = "<img border=0 class='_pager_mav_img' src='{0}'>";

images[0] = this.FristImageUrl.Length > 0 ? this.FristImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity.Information.Web.Component.Images.first.gif"));
images[1] = this.PrevImageUrl.Length > 0 ? this.PrevImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity.Information.Web.Component.Images.prev.gif"));
images[2] = this.NextImageUrl.Length > 0 ? this.NextImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity.Information.Web.Component.Images.next.gif"));
images[3] = this.LastImageUrl.Length > 0 ? this.LastImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity.Information.Web.Component.Images.last.gif"));

List<string> buttons = new List<string>();
string button;
string imageButtonCss = this.ImageButtonClass.Length == 0 ? "btnImage" : this.ImageButtonClass;
#region 设置前后导航

if (pageCount == 0 || pageCount == 1)
{
button = " ";
buttons.Add(button);

button = "";
buttons.Add(button);

button = "";
buttons.Add(button);

button = "";
buttons.Add(button);
}
else if (currentNO == 1 && currentNO != pageCount)
{
//第一页 && 不是最后一页
button = "";
buttons.Add(button);

button = "";
buttons.Add(button);
if (this.PagerType == PagerType.JS)
{
button = string.Format(" <a href='javascript:;' title='下一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO + 1, ">下一页", imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='javascript:;' title='最后一页' class='{3}' οnclick='{0}({1})'>{2}</a>", this.FunctionName, pageCount, "最后一页", imageButtonCss);
buttons.Add(button);
}
else
{
button = string.Format(" <a href='{0}' title='下一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO + 1), ">下一页", imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='{0}' title='最后一页' class='{2}' target='_self'>{1}</a>", this.CreateLink(pageCount), "最后一页", imageButtonCss);
buttons.Add(button);
}
}
else if (currentNO != 1 && currentNO == pageCount)
{
//不是第一页 && 最后一页
if (this.PagerType == PagerType.JS)
{
button = string.Format(" <a href='javascript:;' title='第一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, 1, "第一页", imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='javascript:;' title='上一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO - 1, "上一页<", imageButtonCss);
buttons.Add(button);
}
else
{
button = string.Format(" <a href='{0}' title='第一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(1), "第一页", imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='{0}' title='上一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO - 1), "上一页<", imageButtonCss);
buttons.Add(button);
}

button = "";
buttons.Add(button);

button = "";
buttons.Add(button);
}
else if (currentNO != 1 && currentNO != pageCount)
{
//不是第一页 && 不是最后一页
if (this.PagerType == PagerType.JS)
{

button = string.Format(" <a href='javascript:;' title='第一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, 1, "第一页", imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='javascript:;' title='上一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO - 1, "上一页", imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='javascript:;' title='下一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO + 1, "下一页", imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='javascript:;' title='最后一页' class='{3}' οnclick='{0}({1})'>{2}</a>", this.FunctionName, pageCount, "最后一页", imageButtonCss);
buttons.Add(button);
}
else
{
button = string.Format(" <a href='{0}' title='第一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(1), "第一页", imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='{0}' title='上一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO - 1), "上一页", imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='{0}' title='下一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO + 1), "下一页", imageButtonCss);
buttons.Add(button);

button = string.Format(" <a href='{0}' title='最后一页' class='{2}' target='_self'>{1}</a>", this.CreateLink(pageCount), "最后一页", imageButtonCss);
buttons.Add(button);
}
}
else
{
button = "";
buttons.Add(button);

button = "";
buttons.Add(button);

button = "";
buttons.Add(button);

button = "";
buttons.Add(button);
}

#endregion

return buttons.ToArray();
}

/// <summary>
/// 创建页码按钮
/// </summary>
/// <param name="currentNO">当前页码</param>
/// <param name="pageCount">显示页码数量</param>
/// <returns></returns>
string[] createNumberButton(int currentNO,int pageCount)
{
List<string> buttons = new List<string>();
string button;
int no, fromNO;

if ((currentNO + 2) <= this.NumberButtonCount)//currentNO + 2 在 1 到 linksCount-2 之间
{
fromNO = 1;
}
else if ((currentNO + 2) > this.NumberButtonCount && (currentNO + 2) <= pageCount) // currentNO + 2 在 linksCount-2 到 PageQty 之间
{
fromNO = currentNO - (this.NumberButtonCount - 3);
}
else //currentNO + 2 > PageQty
{
fromNO = pageCount - this.NumberButtonCount + 1;
}

for (int i = 1; i <= this.NumberButtonCount; i++)
{
no = fromNO + i - 1;

if (no == currentNO)
button = string.Format(" <a class='{1}'>{0}</a>\r\n", no, this.CurrentNumberButtonClass.Length == 0 ? "btnNumberCurrent" : this.CurrentNumberButtonClass);
else
{
if (this.PagerType == PagerType.JS)
button = string.Format(" <a href='javascript:;' title='第{2}页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, no, no, this.NumberButtonClass.Length == 0 ? "btnNumber" : this.NumberButtonClass);
else
button = string.Format(" <a href='{0}' title='第{2}页' class='{3}' target='_self'>{1}</a>\r\n", CreateLink(no), no, no, this.NumberButtonClass.Length == 0 ? "btnNumber" : this.NumberButtonClass);
}

buttons.Add(button);
}

return buttons.ToArray();
}

/// <summary>
/// 使用PagerType.Navigate时,用于生成按钮的链接地址
/// </summary>
/// <param name="no"></param>
/// <returns></returns>
string CreateLink(int no)
{
if( DesignMode )
return "#";

string url = HttpContext.Current.Request.RawUrl.ToLower();
string extention = Path.GetExtension(url);
string fileName = Path.GetFileNameWithoutExtension(url);

string name;
if( Regex.IsMatch(fileName, @"([\w\s]+)-(\d+)", RegexOptions.IgnoreCase ) )
//if (fileName.LastIndexOf('-') > 0)
name = fileName.Substring(0, fileName.LastIndexOf('-'));
else
name = fileName;

name = HttpUtility.UrlEncode(name);
string u = url.Substring(0, url.LastIndexOf('/') + 1);

if (no == 1)
u = u + name + extention;
else
u = u + name + "-" + no.ToString() + extention;
return u;
//return HttpContext.Current.Server.UrlEncode(u).Replace("%2f","/");
}
}

#region [Designer]

/// <summary>
/// 验证码图片设计器
/// </summary>
public class PagerDesigner : ControlDesigner
{
private string html = "\r\n<div class='{0}' align='{1}'>\r\n<table class=\"{2}\">\r\n<tr>\r\n{3}\r\n{4}\r\n{5}</tr>\r\n</table>\r\n</div>\r\n";
private string pageInfo = "<td class='Pager_td_0'>\r\n <a class='Pager_td_0_a1'>{0}</a>\r\n <a class='Pager_td_0_a2'>{1}</a>\r\n</td>";
private string tdButton = "<td class='Pager_td_buttons'>\r\n{0}{1}{2}</td>\r\n";
//private string tdNumberButton = "\r\n{0}\r\n";
private string tdUserInput = "<td class='Pager_td_input'>\r\n <input id='{0}' type=text class='Pager_td_input_input' style='border:1px #ccc solid;width:45px;height:18px;'><a style='cursor:pointer' class='Pager_td_input_go' οnclick='{1}' style='padding-left:2px;margin-left:2px; text-decoration:none;color:black;border:1px #ccc solid;text-align:center;font-size:18px; width:22px; height:20px; line-height:20px;'>go</a>\r\n</td>";
/// <summary>
/// 返回HTML
/// </summary>
/// <returns></returns>
public override string GetDesignTimeHtml()
{
string pageInfoString = string.Format(pageInfo, "<a style='width:20px;height:1px;border:1px #ccc solid;'>1</a>", "<a style='margin-left:2px;width:20px;height:1px;border:1px #ccc solid;'>1/1</a>");
string tmp = string.Format(tdButton, "", "<a style='width:20px;height:1px;border:1px #ccc solid;'>1</a>", string.Format(tdUserInput,"tempID","return true;"));
string goString = "";
return string.Format(html, "", "Middle", "", pageInfoString, tmp, goString);
}
}

#endregion
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值