3.2最简单的解决方案
我想最简单无非就是直接写链接,当然也要考虑更换Routing规则的问题,所以我们可以最简单如下来写:
<%
int p = 1;
int.TryParse(Request.QueryString["p"], out p);
%>
<div>
<%=Html.ActionLink("上一页", "Index", new { p= p-1})%>
<strong>当前页:<%=p %></strong>
<%=Html.ActionLink("下一页", "Index", new { p= p+1})%>
</div>
这样就可以得到如果下的分页样式
当然,也可以根据这个来写1,2,3,4,5页的链接,而不写“上一页”或“下一页”
但是这种方法有个问题,就是使用Html.ActionLink的时候要用字符串来指定Action和Controller。下面我们来改换另一种方法来实现
3.3使用RouteLink来实现
我们使用Html.RouteLink就可以实现不与Action或Controller的名称相耦合,例如:
<%for (int i = 1; i < 10; i++)
{
ViewContext.RouteData.Values["p"] = i;//设置页码
Writer.Write(
Html.RouteLink(i.ToString(), ViewContext.RouteData.Values)
);//显示设置页面后的链接
Writer.Write(" ");//连接后显示个空格,好看点
}%>
这个列表,我们就可以显示为
3.4完善这个Pager并封装成一个Helper
上面列出了Pager,但是有几个问题
· 没有上下页
· 没有指定当前页的特殊显示
· 每次调用时都要写一次
· 如果QueryString有其它参数时无法处理
那我们下面来完善这个Pager
并将之封装成一个Helper
/// <summary>
/// 分页Pager显示
/// </summary>
/// <param name="html"></param>
/// <param name="currentPageStr">标识当前页码的QueryStringKey</param>
/// <param name="pageSize">每页显示</param>
/// <param name="totalCount">总数据量</param>
/// <returns></returns>
public static string Pager(this HtmlHelper html, string currentPageStr, int pageSize, int totalCount)
{
var queryString = html.ViewContext.HttpContext.Request.QueryString;
int currentPage = 1; //当前页
int.TryParse(queryString[currentPageStr], out currentPage); //与相应的QueryString绑定
var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //总页数
var dict = new RouteValueDictionary(html.ViewContext.RouteData.Values);
var output = new StringBuilder();
foreach (string key in queryString.Keys)
if (queryString[key] != null && !string.IsNullOrEmpty(key))
dict[key] = queryString[key];
if (totalPages > 1)
{
if (currentPage != 1)
{//处理首页连接
dict["p"] = 1;
output.AppendFormat("{0} ",html.RouteLink("首页", dict));
}
if (currentPage > 1)
{//处理上一页的连接
dict["p"] = currentPage - 1;
output.Append(html.RouteLink("上一页", dict));
}
else
{
output.Append("上一页");
}
output.Append(" ");
int currint = 5;
for (int i = 0; i <= 10; i++)
{//一共最多显示10个页码,前面5个,后面5个
if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
if (currint == i)
{//当前页处理
output.Append(string.Format("[{0}]", currentPage));
}
else
{//一般页处理
dict["p"] = currentPage + i - currint;
output.Append(html.RouteLink((currentPage + i - currint).ToString(), dict));
}
output.Append(" ");
}
if (currentPage < totalPages)
{//处理下一页的链接
dict["p"] = currentPage + 1;
output.Append(html.RouteLink("下一页", dict));
}
else
{
output.Append("下一页");
}
output.Append(" ");
if (currentPage != totalPages)
{
dict["p"] = totalPages;
output.Append(html.RouteLink("末页", dict));
}
output.Append(" ");
}
output.AppendFormat("{0} / {1}", currentPage, totalPages);//这个统计加不加都行
return output.ToString();
}
效果