我在前面的博客里曾经再次总结过一个webform下使用极广的分页辅助类。本文总结一下asp.net mvc下的简单分页工具类,对于需要从事mvc开发的朋友可以参考一下。这个分页辅助类本质上就是直接使用webform下的分页工具类,再配合HtmlHelper扩展方法稍加改进和包装。所有分页过程可以省却很多代码,而且在View(页面)里调用和webform的方式差不多,使用很方便。
1、webform下的一个分页辅助类
关于webform下的分页工具类的具体使用介绍,您可以参考这一篇。
使用的时候,需要初始化样式,在web.config下可以添加配置:
1
2
3
4
|
<
appSettings
>
<!--分页样式-->
<
add
key="PagerStyle" value="PagerCss"/>
</
appSettings
>
|
2、AspNetMvcPager静态类
这个静态类是对MVC下的HtmlHelper添加几个生成分页tag的扩展方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
using
System.Collections.Specialized;
using
System.Text;
namespace
System.Web.Mvc
{
using
DotNet.Common.WebForm;
public
static
class
AspNetMvcPager
{
public
static
string
RenderPager(
this
HtmlHelper helper,
int
leftSize,
int
currentPage,
int
recordsPerPage,
int
totalCount, System.Web.HttpRequest request)
{
string
url = GenerateURL(request);
AspNetPagerControl ctrl =
new
AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, url);
string
pagerStr = AspNetPagerControl.RenderPager(ctrl);
return
GeneratePagerString(pagerStr);
}
public
static
string
RenderPager(
this
HtmlHelper helper,
int
leftSize,
int
currentPage,
int
recordsPerPage,
int
totalCount,
string
baseString)
{
AspNetPagerControl ctrl =
new
AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, baseString);
string
pagerStr = AspNetPagerControl.RenderPager(ctrl);
return
GeneratePagerString(pagerStr);
}
public
static
string
RenderStatisticPager(
this
HtmlHelper helper,
int
leftSize,
int
currentPage,
int
recordsPerPage,
int
totalCount, System.Web.HttpRequest request)
{
string
url = GenerateURL(request);
AspNetPagerControl ctrl =
new
AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, url);
string
pagerStr = AspNetPagerControl.RenderStatisticPager(ctrl);
return
GeneratePagerString(pagerStr);
}
public
static
string
RenderStatisticPager(
this
HtmlHelper helper,
int
leftSize,
int
currentPage,
int
recordsPerPage,
int
totalCount,
string
baseString)
{
AspNetPagerControl ctrl =
new
AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, baseString);
string
pagerStr = AspNetPagerControl.RenderStatisticPager(ctrl);
return
GeneratePagerString(pagerStr);
}
private
static
string
GenerateURL(System.Web.HttpRequest request)
{
StringBuilder url =
new
StringBuilder();
url.Append(request.Url.AbsolutePath);
NameValueCollection collection = request.QueryString;
string
[] keys = collection.AllKeys;
int
counter = 0;
for
(
int
i = 0; i < keys.Length; i++)
{
if
(keys[i].ToLower() ==
"pageindex"
)
{
continue
;
}
url.AppendFormat(
"{0}{1}={2}"
, (counter == 0 ?
"?"
:
"&"
), keys[i], collection[keys[i]]);
counter++;
}
return
url.ToString();
}
private
static
string
GeneratePagerString(
string
pagerStr)
{
TagBuilder builder =
new
TagBuilder(
"div"
);
builder.IdAttributeDotReplacement =
"_"
;
builder.GenerateId(System.Guid.NewGuid().ToString());
builder.InnerHtml = pagerStr;
return
builder.ToString();
}
}
}
|
3、控制器里查询和传参
在控制器里,view里有时候是通过点击查询按钮(POST方式)进行搜索的,有时候是点击分页链接通过url传参的(GET方式),所以控制查询条件和正确分页,都要在ctroller里做好。本文的示例代码给的代码相当简单,分页参数的获取也非常直接,您可以自己分析一下。
4、页面调用
和webform下类似,通过<%= %>直接绑定进行页面呈现:
1
2
3
4
5
6
7
|
<%=Html.RenderPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, HttpContext.Current.Request)%>
<%=Html.RenderStatisticPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, HttpContext.Current.Request)%>
<%=Html.RenderPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount,
string
.Format(
"{0}?firstname={1}&lastname={2}"
, HttpContext.Current.Request.Url.AbsolutePath,pager.FirstName,pager.LastName))%>
<%=Html.RenderStatisticPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount,
string
.Format(
"{0}?firstname={1}&lastname={2}"
, HttpContext.Current.Request.Url.AbsolutePath, pager.FirstName, pager.LastName))%>
|
总体来说,使用起来非常简单,其中传参和url的确定是重点。
需要说明的是,mvc和webform非常明显不同的一个地方,就是mvc对url 进行了重写,一不小心就可能造成404错误发生的惨剧,所以您在传参的时候务必注意。
有图有真相:
本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2011/01/03/1925011.html,如需转载请自行联系原作者