/// <summary>
		/// 生成“商品分类”下拉框中的 option 列表
		/// </summary>
		public static string ToHtmlOptions(this List<Category> list, int currentCategoryId,
			string categoryUrlkey, bool addEmptyItem, params string[] deleteUrlKeys)
		{
			if( list == null )
				throw new ArgumentNullException("list");
			if( string.IsNullOrEmpty(categoryUrlkey) )
				throw new ArgumentNullException("categoryUrlkey");

			HttpContext context = HttpContext.Current;
			if( context == null )
				throw new InvalidProgramException();

			string requestRawUrl = context.Request.RawUrl;


			StringBuilder sb = new StringBuilder();

			MyUrlGenerator generate = new MyUrlGenerator(requestRawUrl);
			generate.Remove(categoryUrlkey).Remove(deleteUrlKeys);

			if( addEmptyItem )
				sb.Append("---请选择---".ToHtmlOption(generate.ToString()));

			foreach( DEMO.Model.Category category in list ) {
				string href = generate.GetNewUrl(categoryUrlkey, category.CategoryID.ToString());

				sb.Append(category.CategoryName.ToHtmlOption(href, (category.CategoryID == currentCategoryId)));
			}

			return sb.ToString();
		}
		/// <summary>
		/// 根据分页参数生成与JQuery Easy UI 兼容的分页条代码
		/// </summary>
		/// <param name="pagingInfo">分页参数</param>
		/// <param name="urlParamName">URL中的分页序号参数</param>
		/// <returns>分页条代码</returns>
		public static string ToHtml(this PagingInfo pagingInfo, string urlParamName)
		{
			if( pagingInfo == null )
				throw new ArgumentNullException("pagingInfo");

			if( pagingInfo.PageSize == 0 )
				throw new ArgumentOutOfRangeException("PagingInfo.PageSize is zero.");

			if( string.IsNullOrEmpty(urlParamName) )
				throw new ArgumentNullException("urlParamName");

			HttpContext context = HttpContext.Current;
			if( context == null )
				throw new InvalidProgramException();

			string requestRawUrl = context.Request.RawUrl;


			int pageCount = (int)Math.Ceiling((double)pagingInfo.TotalRecords / (double)pagingInfo.PageSize);

			if( pageCount < 1 )
				return string.Empty;



			StringBuilder sb = new StringBuilder();
			sb.AppendLine("<div class='pagination'>");
			sb.AppendLine("<table cellpadding='0' cellspacing='0' border='0'><tr>");
			sb.AppendLine("<td>{labFirst}</td>");
			sb.AppendLine("<td>{labPrev}</td>");
			sb.AppendLine("<td><div class='pagination-btn-separator'></div></td>");
			sb.AppendLine("<td>&nbsp;页&nbsp;</td>");
			sb.AppendLine("<td>{txtCurrentPage}</td>");
			sb.AppendLine("<td>&nbsp;/{labPageCount}&nbsp;</td>");
			sb.AppendLine("<td><div class='pagination-btn-separator'></div></td>");
			sb.AppendLine("<td>{labNext}</td>");
			sb.AppendLine("<td>{labLast}</td>");
			sb.AppendLine("<td><div class='pagination-btn-separator'></div></td>");
			sb.AppendLine("<td>{labRefresh}</td>");
			sb.AppendLine("</tr></table>");
			sb.AppendLine("<div class='pagination-info'>{labInfo}</div>");
			sb.AppendLine("{script}");
			sb.AppendLine("<div style='clear: both;'></div></div>");

			bool firstEnabled = (pagingInfo.PageIndex > 0);
			bool lastEnabled = (pagingInfo.PageIndex < pageCount - 1);


			MyUrlGenerator generate = new MyUrlGenerator(requestRawUrl);
			generate.Remove("_");	// "_" 是 jquery 加上去的。
			string linkFirst = generate.GetNewUrl(urlParamName, "1");
			string linkLast = generate.GetNewUrl(urlParamName, pageCount.ToString());
			string linkPrevious = generate.GetNewUrl(urlParamName, pagingInfo.PageIndex.ToString());
			string linkNext = generate.GetNewUrl(urlParamName, (pagingInfo.PageIndex + 2).ToString());

			string ctlId = "txt" + Guid.NewGuid().ToString("N");
			string txtCurrentPage = string.Format("<input type='text' class='pageNumber' value=\"{0}\" baseUrl=\"{1}\" max=\"{2}\" autoRedire='true' param=\"{3}\" id='{4}' />",
				(pagingInfo.PageIndex + 1).ToString(),
				HttpUtility.HtmlAttributeEncode(generate.GetNewUrl(null, null, urlParamName)),
				pageCount.ToString(),
				HttpUtility.HtmlAttributeEncode(urlParamName),
				ctlId);

			string script = string.Format("<script type=\"text/javascript\">$(function(){{ SetPageNumberTextbox('{0}'); }});</script>", ctlId);

			string labFirst = GenerateButton("pagination-first", linkFirst, null, firstEnabled, "转到第一页");
			string labPrev = GenerateButton("pagination-prev", linkPrevious, null, firstEnabled, "转到前一页");
			string labNext = GenerateButton("pagination-next", linkNext, null, lastEnabled, "转到后一页");
			string labLast = GenerateButton("pagination-last", linkLast, null, lastEnabled, "转到最后一页");
			string labPageCount = pageCount.ToString();
			string labRefresh = GenerateButton("pagination-load", requestRawUrl, "刷新", true, "刷新当前页");
			int endRecord = ((pagingInfo.PageIndex + 1) * pagingInfo.PageSize);
			string labInfo = string.Format("显示范围:{0} 到 {1} ,  共 {2} 条记录",
				(pagingInfo.PageIndex * pagingInfo.PageSize + 1), ((endRecord < pagingInfo.TotalRecords) ? endRecord : pagingInfo.TotalRecords), pagingInfo.TotalRecords);

			sb.Replace("{labFirst}", labFirst).Replace("{labPrev}", labPrev).Replace("{txtCurrentPage}", txtCurrentPage);
			sb.Replace("{labPageCount}", labPageCount).Replace("{labNext}", labNext).Replace("{labLast}", labLast);
			sb.Replace("{labRefresh}", labRefresh).Replace("{labInfo}", labInfo).Replace("{script}", script);

			return sb.ToString();
		}
        /// <summary>
        /// 根据分页参数生成与JQuery Easy UI 兼容的分页条代码
        /// </summary>
        /// <param name="pagingInfo">分页参数</param>
        /// <param name="urlParamName">URL中的分页序号参数</param>
        /// <returns>分页条代码</returns>
        public static string ToHtml(this PagingInfo pagingInfo, string urlParamName)
        {
            if (pagingInfo == null)
            {
                throw new ArgumentNullException("pagingInfo");
            }

            if (pagingInfo.PageSize == 0)
            {
                throw new ArgumentOutOfRangeException("PagingInfo.PageSize is zero.");
            }

            if (string.IsNullOrEmpty(urlParamName))
            {
                throw new ArgumentNullException("urlParamName");
            }

            HttpContext context = HttpContext.Current;

            if (context == null)
            {
                throw new InvalidProgramException();
            }

            string requestRawUrl = context.Request.RawUrl;


            int pageCount = (int)Math.Ceiling((double)pagingInfo.TotalRecords / (double)pagingInfo.PageSize);

            if (pageCount < 1)
            {
                return(string.Empty);
            }



            StringBuilder sb = new StringBuilder();

            sb.AppendLine("<div class='pagination'>");
            sb.AppendLine("<table cellpadding='0' cellspacing='0' border='0'><tr>");
            sb.AppendLine("<td>{labFirst}</td>");
            sb.AppendLine("<td>{labPrev}</td>");
            sb.AppendLine("<td><div class='pagination-btn-separator'></div></td>");
            sb.AppendLine("<td>&nbsp;页&nbsp;</td>");
            sb.AppendLine("<td>{txtCurrentPage}</td>");
            sb.AppendLine("<td>&nbsp;/{labPageCount}&nbsp;</td>");
            sb.AppendLine("<td><div class='pagination-btn-separator'></div></td>");
            sb.AppendLine("<td>{labNext}</td>");
            sb.AppendLine("<td>{labLast}</td>");
            sb.AppendLine("<td><div class='pagination-btn-separator'></div></td>");
            sb.AppendLine("<td>{labRefresh}</td>");
            sb.AppendLine("</tr></table>");
            sb.AppendLine("<div class='pagination-info'>{labInfo}</div>");
            sb.AppendLine("{script}");
            sb.AppendLine("<div style='clear: both;'></div></div>");

            bool firstEnabled = (pagingInfo.PageIndex > 0);
            bool lastEnabled  = (pagingInfo.PageIndex < pageCount - 1);


            MyUrlGenerator generate = new MyUrlGenerator(requestRawUrl);

            generate.Remove("_");               // "_" 是 jquery 加上去的。
            string linkFirst    = generate.GetNewUrl(urlParamName, "1");
            string linkLast     = generate.GetNewUrl(urlParamName, pageCount.ToString());
            string linkPrevious = generate.GetNewUrl(urlParamName, pagingInfo.PageIndex.ToString());
            string linkNext     = generate.GetNewUrl(urlParamName, (pagingInfo.PageIndex + 2).ToString());

            string ctlId          = "txt" + Guid.NewGuid().ToString("N");
            string txtCurrentPage = string.Format("<input type='text' class='pageNumber' value=\"{0}\" baseUrl=\"{1}\" max=\"{2}\" autoRedire='true' param=\"{3}\" id='{4}' />",
                                                  (pagingInfo.PageIndex + 1).ToString(),
                                                  HttpUtility.HtmlAttributeEncode(generate.GetNewUrl(null, null, urlParamName)),
                                                  pageCount.ToString(),
                                                  HttpUtility.HtmlAttributeEncode(urlParamName),
                                                  ctlId);

            string script = string.Format("<script type=\"text/javascript\">$(function(){{ SetPageNumberTextbox('{0}'); }});</script>", ctlId);

            string labFirst     = GenerateButton("pagination-first", linkFirst, null, firstEnabled, "转到第一页");
            string labPrev      = GenerateButton("pagination-prev", linkPrevious, null, firstEnabled, "转到前一页");
            string labNext      = GenerateButton("pagination-next", linkNext, null, lastEnabled, "转到后一页");
            string labLast      = GenerateButton("pagination-last", linkLast, null, lastEnabled, "转到最后一页");
            string labPageCount = pageCount.ToString();
            string labRefresh   = GenerateButton("pagination-load", requestRawUrl, "刷新", true, "刷新当前页");
            int    endRecord    = ((pagingInfo.PageIndex + 1) * pagingInfo.PageSize);
            string labInfo      = string.Format("显示范围:{0} 到 {1} ,  共 {2} 条记录",
                                                (pagingInfo.PageIndex * pagingInfo.PageSize + 1), ((endRecord < pagingInfo.TotalRecords) ? endRecord : pagingInfo.TotalRecords), pagingInfo.TotalRecords);

            sb.Replace("{labFirst}", labFirst).Replace("{labPrev}", labPrev).Replace("{txtCurrentPage}", txtCurrentPage);
            sb.Replace("{labPageCount}", labPageCount).Replace("{labNext}", labNext).Replace("{labLast}", labLast);
            sb.Replace("{labRefresh}", labRefresh).Replace("{labInfo}", labInfo).Replace("{script}", script);

            return(sb.ToString());
        }