变相怪杰 发表于 2015-1-16 14:25:55

来一篇关于NET的详解一个ASP.NET MVC分页效果

来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!在这里我们将谈到的是ASP.NETMVC框架中的一个HTML帮助类,但愿经由过程本文能对人人懂得ASP.NETMVC分页有所匡助。

自己写的一个ASP.NETMVC分页Helper,撑持一般分页(也就是,首页、上一页、下一页、末页等),综合分页(一般分页和数字分页的综合)。上面是ASP.NETMVC分页效果:

分页代码:
PagerHelper.cs
1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Collections.Specialized;
4usingSystem.Linq;
5usingSystem.Web;
6usingSystem.Text;
7usingSystem.Web.Mvc;
8usingSystem.Web.Routing;
9usingSystem.Data.Objects.DataClasses;
10namespaceSystem.Web.Mvc
11{
12publicstaticclassPagerHelper
13{
26publicstaticstringPager(thisHtmlHelperhelper,stringid,intcurrentPageIndex,intpageSize,intrecordCount,objecthtmlAttributes,stringclassName,PageModemode)
27{
28TagBuilderbuilder=newTagBuilder("table");
29builder.IdAttributeDotReplacement="_";
30builder.GenerateId(id);
31builder.AddCssClass(className);
32builder.MergeAttributes(newRouteValueDictionary(htmlAttributes));
33builder.InnerHtml=GetNormalPage(currentPageIndex,pageSize,recordCount,mode);
34returnbuilder.ToString();
35}

46publicstaticstringPager(thisHtmlHelperhelper,stringid,intcurrentPageIndex,intpageSize,intrecordCount,stringclassName)
47{
48returnPager(helper,id,currentPageIndex,pageSize,recordCount,null,className,PageMode.Normal);
49}

59publicstaticstringPager(thisHtmlHelperhelper,stringid,intcurrentPageIndex,intpageSize,intrecordCount)
60{
61returnPager(helper,id,currentPageIndex,pageSize,recordCount,null);
62}

73publicstaticstringPager(thisHtmlHelperhelper,stringid,intcurrentPageIndex,intpageSize,intrecordCount,PageModemode)
74{
75returnPager(helper,id,currentPageIndex,pageSize,recordCount,null,mode);
76}

88publicstaticstringPager(thisHtmlHelperhelper,stringid,intcurrentPageIndex,intpageSize,intrecordCount,stringclassName,PageModemode)
89{
90returnPager(helper,id,currentPageIndex,pageSize,recordCount,null,className,mode);
91}

93//猎取一般分页
99privatestaticstringGetNormalPage(intcurrentPageIndex,intpageSize,intrecordCount,PageModemode)
100{
101intpageCount=(recordCount%pageSize==0?recordCount/pageSize:recordCount/pageSize+1);
102StringBuilderurl=newStringBuilder();
103url.Append(HttpContext.Current.Request.Url.AbsolutePath+"?page={0}");
104NameValueCollectioncollection=HttpContext.Current.Request.QueryString;
105string[]keys=collection.AllKeys;
106for(inti=0;i<keys.Length;i++)
107{
108if(keys.ToLower()!="page")
109url.AppendFormat("&{0}={1}",keys,collection]);
110}
111StringBuildersb=newStringBuilder();
112sb.Append("");
113sb.Append(String.Format("统共{0}笔记录,共{1}页,以后第{2}页",recordCount,pageCount,currentPageIndex);
114if(currentPageIndex==1)
115sb.Append("首页");
116else
117{
118stringurl1=string.Format(url.ToString(),1);
119sb.AppendFormat("首页",url1);
120}
121if(currentPageIndex>1)
122{
123stringurl1=string.Format(url.ToString(),currentPageIndex-1);
124sb.AppendFormat("上一页",url1);
125}
126else
127sb.Append("上一页");
128if(mode==PageMode.Numeric)
129sb.Append(GetNumericPage(currentPageIndex,pageSize,recordCount,pageCount,url.ToString()));
130if(currentPageIndex<pageCount)
131{
132stringurl1=string.Format(url.ToString(),currentPageIndex+1);
133sb.AppendFormat("下一页",url1);
134}
135else
136sb.Append("下一页");
137
138if(currentPageIndex==pageCount)
139sb.Append("末页");
140else
141{
142stringurl1=string.Format(url.ToString(),pageCount);
143sb.AppendFormat("末页",url1);
144}
145returnsb.ToString();
146}

148//猎取数字分页
156privatestaticstringGetNumericPage(intcurrentPageIndex,intpageSize,intrecordCount,intpageCount,stringurl)
157{
158intk=currentPageIndex/10;
159intm=currentPageIndex%10;
160StringBuildersb=newStringBuilder();
161if(currentPageIndex/10==pageCount/10)
162{
163if(m==0)
164{
165k--;
166m=10;
167}
168else
169m=pageCount%10;
170}
171else
172m=10;
173for(inti=k*10+1;i<=k*10+m;i++)
174{
175if(i==currentPageIndex)
176sb.AppendFormat("{0}",i);
177else
178{
179stringurl1=string.Format(url.ToString(),i);
180sb.AppendFormat("{1}",url1,i);
181}
182}
183
184returnsb.ToString();
185}
186}

188//分页形式
190publicenumPageMode
191{
193//一般分页形式
195Normal,
197//一般分页加数字分页
199Numeric
200}
201}
202PagerQuery.cs包括两个属性,一个是PageInfo实体类属性Pager,包括RecordCount,CurrentPageIndex,PageSize三个属性。一个是ModelEntityList属性。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
namespaceSystem.Web.Mvc
{
publicclassPagerQuery<TPager,TEntityList>
{
publicPagerQuery(TPagerpager,TEntityListentityList)
{
this.Pager=pager;
this.EntityList=entityList;
}
publicTPagerPager{get;set;}
publicTEntityListEntityList{get;set;}
}
}
PageInfo.cs

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
namespaceSystem.Web.Mvc
{
publicclassPagerInfo
{
publicintRecordCount{get;set;}
publicintCurrentPageIndex{get;set;}
publicintPageSize{get;set;}
}
}
利用示例:
<%@PageTitle=""Language="C#"MasterPageFile="http://www.lmwlove.com/ac/ID210/~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<PagerQuery<PagerInfo,IList<NewsArticleInfo>>>"%>

<asp:ContentID="Content1"ContentPlaceHolderID="TitleContent"runat="server">
NewsList
</asp:Content>
<asp:ContentID="Content2"ContentPlaceHolderID="MainContent"runat="server">
<h2>NewsList</h2>
<table><tr><th></th>
<th>NoteID</th>
<th>Title</th>
<th>Author</th>
<th>Hit</th>
<th>ReplyNum</th>
</tr>
<%foreach(variteminModel.EntityList){%>
<tr><td>
<%=Html.ActionLink("Edit","Edit",new{/*id=item.PrimaryKey*/})%>|
<%=Html.ActionLink("Details","NewsDetail",new{noteID=item.NoteID})%>
</td><td><%=Html.Encode(item.NoteID)%></td>
<td><%=Html.Encode(item.Title)%></td>
<td><%=Html.Encode(item.Author)%></td>
<td><%=Html.Encode(item.Hit)%></td>
<td><%=Html.Encode(item.ReplyNum)%></td>
</tr>
<%}%></table>
<p>
<%=Html.Pager("pager",Model.Pager.CurrentPageIndex,Model.Pager.PageSize,Model.Pager.RecordCount,PageMode.Numeric)%></p>
</asp:Content>

publicActionResultNewsList(intboardID,int?page)
{
PagerInfopager=newPagerInfo();
NewsArticleInfoinfo=newNewsArticleInfo();
info.NewsBoard=newNewsBoardInfo();
info.NewsBoard.BoardID=boardID;
pager.RecordCount=Resolve().GetArticleDataList(info,ArticleTypeEnum.Pass);
pager.PageSize=10;
pager.CurrentPageIndex=(page!=null?(int)page:1);
IListresult=Resolve().GetArticleDataList(pager.CurrentPageIndex,pager.PageSize,ArticleTypeEnum.Pass,info);
PagerQuery>query=newPagerQuery>(pager,result);
returnView(query);
}
呵呵,那你就关注微软的招聘信息以及别人的招聘经验啊,还有也不一定去做技术的,你如果真的想去就多了解了解。(其实我的意思是说想到微软做技术是很不容易的。

海妖 发表于 2015-1-18 14:33:23

使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

只想知道 发表于 2015-1-25 08:19:13

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

不帅 发表于 2015-2-2 19:25:56

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。

冷月葬花魂 发表于 2015-2-8 04:51:40

现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。

愤怒的大鸟 发表于 2015-2-24 17:33:26

提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

莫相离 发表于 2015-3-7 13:12:39

HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.

灵魂腐蚀 发表于 2015-3-15 07:29:05

在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。

仓酷云 发表于 2015-3-21 22:44:30

PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。
页: [1]
查看完整版本: 来一篇关于NET的详解一个ASP.NET MVC分页效果