适用于WebForm Mvc的Pager分页组件C#实现
本文为大家分享了自己写的一个Pager分页组件,WebForm,Mvc都适用,具体内容如下
分页控件其实就是根据链接在页面间传递参数,因为我看到MVC中你可以看到这样传递参数的new{para=val}这种方式传递参数,于是我想到用可以模仿这种传递参数的方式,那就用dynamic来作为参数对象传递。
下面是附上我写的具体的实现的代码
数据处理代码:
1.定义IPagedList接口
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; namespaceInfrastruction.Pager { publicinterfaceIPagedList { intpageIndex{get;set;} intpageSize{get;set;} inttotalItemCount{get;set;} inttotalPageCount{get;} } }
2.实现IPagedList接口
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Web; namespaceInfrastruction.Pager { publicclassPagedList<T>:List<T>,IPagedList { publicintpageIndex { get; set; } publicintpageSize { get; set; } publicinttotalItemCount { get; set; } publicinttotalPageCount { get { returntotalItemCount%pageSize==0?(totalItemCount/pageSize):(totalItemCount/pageSize+1); } } publicPagedList(IEnumerable<T>sources,intpageIndex,intpageSize) { if(sources!=null&&sources.Any()) { this.AddRange(sources.Skip(pageSize*(pageIndex-1)).Take(pageSize).ToList()); } this.pageIndex=pageIndex; this.pageSize=pageSize; this.totalItemCount=sources.Count(); } } }
分页标签处理代码:
3.PagerHelper
usingInfrastruction.Pager; usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Reflection; usingSystem.Text; usingSystem.Web; usingSystem.Web.UI; namespaceSystem.Web.UI { publicstaticclassPagerHelper { publicstaticstringPager(stringurl,IPagedListpagedList) { StringBuilderbuilder=newStringBuilder(); if(pagedList!=null) { builder.Append("<scripttype='text/javascript'>"); builder.Append("window.onload=function(){"); builder.Append("varelements=document.getElementById('pager').childNodes;"); builder.Append("for(vari=0;i<elements.length;i++){"); builder.Append("vartxt=elements[i].innerText||elements[i].textContent;"); builder.Append("if(elements[i].nodeType=='1'&&txt=='"+pagedList.pageIndex+"'){"); builder.Append("elements[i].style.textDecoration='underline';break;}}}"); builder.Append("</script>"); builder.Append("<divid='pager'>"); builder.Append("<spanclass='p'>"); builder.AppendFormat("共{0}条数据页次:{1}/{2}",pagedList.totalItemCount,pagedList.pageIndex,pagedList.totalPageCount,"上一页"); builder.Append("</span>"); builder.Append(" "); builder.Append(" "); builder.Append(" "); builder.Append(" "); if(pagedList.pageIndex>1&&pagedList.pageIndex<=pagedList.totalPageCount) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,1,"首页"); builder.Append("</span>"); builder.Append(" "); builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,pagedList.pageIndex-1,"上一页"); builder.Append("</span>"); builder.Append(" "); } if(pagedList.totalPageCount>1&&pagedList.totalPageCount<=10) { for(inti=1;i<=pagedList.totalPageCount;i++) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,i,i); builder.Append("</span>"); builder.Append(" "); } } elseif(pagedList.totalPageCount>10) { if(pagedList.pageIndex<11) { for(inti=1;i<=10;i++) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,i,i); builder.Append("</span>"); builder.Append(" "); } builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,11,"..."); builder.Append("</span>"); builder.Append(" "); } else { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,(pagedList.pageIndex-6),"..."); builder.Append("</span>"); builder.Append(" "); if(pagedList.pageIndex>=11&&pagedList.totalPageCount<=pagedList.pageIndex+5) { for(inti=pagedList.pageIndex-5;i<=pagedList.totalPageCount;i++) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,i,i); builder.Append("</span>"); builder.Append(" "); } } else { for(inti=pagedList.pageIndex-5;i<=pagedList.pageIndex+5;i++) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,i,i); builder.Append("</span>"); builder.Append(" "); } builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,(pagedList.pageIndex+6),"..."); builder.Append("</span>"); builder.Append(" "); } } } if(pagedList.pageIndex>=1&&pagedList.pageIndex<pagedList.totalPageCount) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,pagedList.pageIndex+1,"下一页"); builder.Append("</span>"); builder.Append(" "); builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?pageIndex={1}'>{2}</a>",url,pagedList.totalPageCount,"尾页"); builder.Append("</span>"); builder.Append(" "); } builder.Append("</div>"); } returnbuilder.ToString(); } publicstaticstringPager(stringurl,IPagedListpagedList,dynamicobjAttr) { StringBuilderbuilder=newStringBuilder(); if(pagedList!=null) { builder.Append("<scripttype='text/javascript'>"); builder.Append("window.onload=function(){"); builder.Append("varelements=document.getElementById('pager').childNodes;"); builder.Append("for(vari=0;i<elements.length;i++){"); builder.Append("vartxt=elements[i].innerText||elements[i].textContent;"); builder.Append("if(elements[i].nodeType=='1'&&txt=='"+pagedList.pageIndex+"'){"); builder.Append("elements[i].style.textDecoration='underline';break;}}}"); builder.Append("</script>"); stringparas=""; PropertyInfo[]infos=objAttr.GetType().GetProperties(); if(infos!=null&&infos.Any()) { foreach(varitemininfos) { paras+=string.Format("{0}={1}",item.Name,item.GetValue(objAttr,null)); paras+="&"; } } paras=paras+"pageIndex="; builder.Append("<divid='pager'>"); builder.Append("<spanclass='p'>"); builder.AppendFormat("共{0}条数据页次:{1}/{2}",pagedList.totalItemCount,pagedList.pageIndex,pagedList.totalPageCount,"上一页"); builder.Append("</span>"); builder.Append(" "); builder.Append(" "); builder.Append(" "); builder.Append(" "); if(pagedList.pageIndex>1&&pagedList.pageIndex<=pagedList.totalPageCount) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+1,"首页"); builder.Append("</span>"); builder.Append(" "); builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+(pagedList.pageIndex-1),"上一页"); builder.Append("</span>"); builder.Append(" "); } if(pagedList.totalPageCount>1&&pagedList.totalPageCount<=10) { for(inti=1;i<=pagedList.totalPageCount;i++) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+i,i); builder.Append("</span>"); builder.Append(" "); } } elseif(pagedList.totalPageCount>10) { if(pagedList.pageIndex<11) { for(inti=1;i<=10;i++) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+i,i); builder.Append("</span>"); builder.Append(" "); } builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+11,"..."); builder.Append("</span>"); builder.Append(" "); } else { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+(pagedList.pageIndex-6),"..."); builder.Append("</span>"); builder.Append(" "); if(pagedList.pageIndex>=11&&pagedList.totalPageCount<=pagedList.pageIndex+5) { for(inti=pagedList.pageIndex-5;i<=pagedList.totalPageCount;i++) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+i,i); builder.Append("</span>"); builder.Append(" "); } } else { for(inti=pagedList.pageIndex-5;i<=pagedList.pageIndex+5;i++) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+i,i); builder.Append("</span>"); builder.Append(" "); } builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+(pagedList.pageIndex+6),"..."); builder.Append("</span>"); builder.Append(" "); } } } if(pagedList.pageIndex>=1&&pagedList.pageIndex<pagedList.totalPageCount) { builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+(pagedList.pageIndex+1),"下一页"); builder.Append("</span>"); builder.Append(" "); builder.Append("<spanclass='p'>"); builder.AppendFormat("<ahref='{0}?{1}'>{2}</a>",url,paras+pagedList.totalPageCount,"尾页"); builder.Append("</span>"); builder.Append(" "); } builder.Append("</div>"); } returnbuilder.ToString(); } } }
4. PagerLinqExtension(基于linq的扩展)
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Linq.Expressions; usingSystem.Web; namespaceInfrastruction.Pager { publicstaticclassPagerLinqExtension { publicstaticPagedList<T>ToPagedList<T>(thisIQueryable<T>source,intpageIndex,intpageSize) { returnnewPagedList<T>(source,pageIndex,pageSize); } } }
调用方法
1.Webform调用: <%=PagerHelper.Pager("Products.aspx",pageList,new{cid=Cid})%> 或者用literal在后台绑定也行
2.Mvc调用:
需要扩展一下方法
namespaceSystem.Web.Mvc.Html { publicstaticclassHtmlExtension { publicstaticIHtmlStringPager(thisHtmlHelperhelper,stringurl,IPagedListpagedList) { returnhelper.Raw(PagerHelper.Pager(url,pagedList)); } publicstaticIHtmlStringPager(thisHtmlHelperhelper,stringurl,IPagedListpagedList,dynamicobjAttr) { returnhelper.Raw(PagerHelper.Pager(url,pagedList,objAttr)); } } }
然后页面调用@Html.Pager("Products.aspx",pageList,new{cid=Cid,......})
全部的代码都在上面,希望大家认真学习,对大家学习使用分页控件有所帮助。