在信息页中调用分页数据时,信息后面一般都需要分页控制按钮面板,分页面板是一个稍显繁琐的功能,下面直接上代码:
@functions{
//默认分页函数
private string Pagebreak(int page, string urlPrefix, string urlParams = "")
{
string rv = "";
if (page > 1)
{
rv = urlPrefix + page + "/";
}
else
{
rv = urlPrefix;
}
rv += urlParams;
return rv;
}
//获取url参数方法
private string GetUrlParams()
{
string rv = "";
System.Collections.Specialized.NameValueCollection queryStrings = Request.QueryString;
int count = queryStrings.Count;
if (count > 0)
{
rv = "?";
}
foreach (string key in queryStrings)
{
if (rv.IndexOf("=") > 0)
{
rv += "&";
}
rv += key + "=" + HttpUtility.UrlEncode(queryStrings[key]);
}
return rv;
}
}
@{
PageInfo pageInfo = (PageInfo)Model;
int pageCount = pageInfo.PageCount;
int pageSize = pageInfo.PageSize;
int recordCount = pageInfo.RecordCount;
int currentPage = pageInfo.CurrentPage;
int m = 2; //左右两边显示页码数
string urlParams = GetUrlParams();
string urlPrefix = Html.ColumnUrl();//获取当前栏目url,如果是自定义文件,请自行修改为路径。
}
<div class="text-center">
<ul class="pagination">
@{
if (currentPage > 1)
{
<li>
<a href="@Pagebreak(currentPage-1,urlPrefix,urlParams)">«</a>
</li>
}
else
{
<li class="disabled">
<a>«</a>
</li>
}
int startPage = currentPage - m;
int lastPage = currentPage + m;
int cha = 0;
if (lastPage > pageCount)
{
cha = lastPage - pageCount;
startPage = startPage - cha;
if (startPage < 1)
{
startPage = 1;
}
lastPage = pageCount;
}
else if (startPage < 1)
{
cha = 1 - startPage;
startPage = startPage + cha;
lastPage = lastPage + cha;
if (lastPage > pageCount)
{
lastPage = pageCount;
}
}
if (startPage > 1)
{
<li><a href="@Pagebreak(1,urlPrefix,urlParams)">1 ...</a></li>
}
for (int i = startPage; i <= lastPage; i++)
{
<li@(currentPage==i?" class=active":"")><a href="@Pagebreak(i,urlPrefix,urlParams)">@i</a></li>
}
if (lastPage < pageCount)
{
<li><a href="@Pagebreak(pageCount,urlPrefix,urlParams)">... @pageCount</a></li>
}
if (currentPage < pageCount)
{
<li>
<a href="@Pagebreak(currentPage+1,urlPrefix,urlParams)">»</a>
</li>
}
else
{
<li class="disabled">
<a>»</a>
</li>
}
}
</ul>
</div>把上面代码保存为PagebreakPartial.cshtml放在模板的Views/Shared目录下作为局部文件,这样就可以在所有需要分页的模板中调用,实现代码的重用性,下面用实例演示完整的分页模板。
@{
//实例化一个分页信息描述类
PageInfo pageInfo = new PageInfo()
{
PageSize = 10,
CurrentPage = ViewBag.CurrentPage //系统预设
};
int columnId = Html.CurrentColumnId();//获取当前栏目id
var dataList = Html.InfoDataList(new { ColumnId = columnId, OrderBy = "thedate desc" }, null, null, pageInfo);
}
<div class="news-list">
@foreach (var item in dataList)
{
string url = Html.InfoDataUrl((int)item.ColumnId, (int)item.Id); //获取信息内容页url,固定语法。
<div>
<div class="title"><a href="@url" target="_blank">@item.Title</a></div>
<div class="date">@item.Thedate</div>
</div>
}
</div>
@Html.Partial("PagebreakPartial", pageInfo)模板制作人员可以在上面代码基础上完善,其中的@Html.Partial("PagebreakPartial", pageInfo)就是调用分页局部视图,第一个参数为文件名,第二个参数为PageInfo描述类,大家记得这种固定语法就可以了。
