前台写数据展现时 有时需要用到分页 以下是自己写的分页源码
HTML页面的 格式 给DIv加一个ID
在给分页写个框架
<div class="row" id="imglist">
</div>
<%--分页控件--%>
<div class="row">
<div class="col-md-12 text-right">
<nav aria-label="Page navigation">
<ul class="pagination pagination-lg" id="fenye" >
</ul>
</nav>
</div>
</div>
然后添加JQ引用
在写一个Jq 编写 写入正则方法 加入引用
//获取Url参数
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null)
return unescape(r[2]);
return null;
}
然后取值并使用Ajax方法传入后台
<%--展现图片列表及分页--%>
<script type="text/javascript">
//记录每页有多少条数据 默认4条
var count = 4;
//记录产品的类型
var Type = 2;
//页面加载后运行此方法
$(function () {
//请求数据
//记录当前第几页 默认第一页
var page = 1;
console.log(getUrlParam("Type"));
if (getUrlParam("Type") != null) {
type = getUrlParam("Type");
}
GetImgList(page)
});
//更改类型方法
function GengGai(leixing) {
Type = leixing;
var page = 1;
GetImgList(page)
}
//前台后台请求数据的方法 传递当前第几页 一页多少条
function GetImgList(page) {
$.ajax({
type: "POST",
url: "../News/NewsList.ashx?action=GetNewsByType",
data: { page: page, count: count, Type: Type },
contentType: "application/x-www-form-urlencoded",
dataType: "json",
async: false,
cache: false,
success: function (data) {
//总条数
var total = data.total;
//查询到的图片列表数据
var imgList = data.rows;
var imgHtml = "";
//遍历查询到的图片列表数据并且拼接成展现出来的HTML
for (var i = 0; i < imgList.length; i++) {
imgHtml = imgHtml + '<div class="col-md-6" ><div style="height: 120px; margin-top: 10px;"><div class="w-590-h-120"><div class="row"><div class="red"><a href="Details.aspx?FId=' + imgList[i].FId + '"><div class="col-md-3" style="margin-top: 10px; margin-left: 10px;"><img style="width: 115px; height: 100px;" src="' + imgList[i].FImg + '" /></div><div class="col-md-6" style="height: 100px; margin-top: 10px;"><p>' + imgList[i].FAbout + '</p></div><div class="col-md-3"><div class="w-100-h-100-t-10"><p style="font-size: 17px; line-height: 100px; text-align: center">' + changeDateFormat(imgList[i].FTime) + '</p></div></div></a></div></div></div></div></div>'
}
//清除原有数据
$("#imglist").html("");
//渲染新的图片列表数据
$("#imglist").html(imgHtml);
//计算分页 总条数 除 每页的条数
var fenye = Math.ceil(total / count);
//分页html
var fenyeHtml = "";
//判断是否要头
if (page - 2 > 1) {
if (fenye > 5) {
//要头
fenyeHtml = '<li><a href ="javascript:void(0);" onclick="GetImgList(1)" aria - label="Previous" ><span aria-hidden="true">«</span></a ></li >';
}
///处理的 678
if (fenye - page <= 2) {
//不要尾
//page=4 fenye=5
//向前加4-(fenye-page)
for (var i = 4 - (fenye - page); i > 0; i--) {
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page - i) + ')">' + (page - i) + '</a></li>';
}
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" style="background-color:red" onclick="GetImgList(' + page + ')">' + page + '</a></li>';
//加几=fenye-page
for (var i = 1; i <= fenye - page; i++) {
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page + i) + ')">' + (page + i) + '</a></li>';
}
}
else {
debugger;
//正常+2
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" style="background-color:red" onclick="GetImgList(' + page + ')">' + page + '</a></li>';
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page + 1) + ')">' + (page + 1) + '</a></li>';
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page + 2) + ')">' + (page + 2) + '</a></li>';
//要尾
fenyeHtml = fenyeHtml + '<li>< a href = "javascript:void(0);" onclick="GetImgList(' + fenye + ')" aria - label="Next" ><span aria-hidden="true">»</span></a ></li >';
}
}
else {
//1 2 3
//不要头
//如果小于3
if (page < 3) {
//12
//减几=page-1
if (page == 2) {
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(1)">1</a></li>';
}
//正常值
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" style="background-color:red" onclick="GetImgList(' + page + ')">' + page + '</a></li>';
}
else {
//3
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(1)">1</a></li>';
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(2)">2</a></li>';
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" style="background-color:red" onclick="GetImgList(3)">3</a></li>';
}
//page+3 是不是大于分页数
if (page + (5 - page) > fenye) {
//不能加那么多 加几= fenye-page
for (var i = 1; i <= fenye - page; i++) {
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page + i) + ')" >' + (page + i) + '</a></li>';
}
}
else {
//正常加 5-page
for (var i = 1; i <= 5 - page; i++) {
fenyeHtml = fenyeHtml + '<li><a href="javascript:void(0);" onclick="GetImgList(' + (page + i) + ')">' + (page + i) + '</a></li>';
}
}
if (fenye > 5) {
fenyeHtml = fenyeHtml + '<li>< a href = "javascript:void(0);" onclick="GetImgList(' + fenye + ')" aria - label="Next" ><span aria-hidden="true">»</span></a ></li >';
}
}
//清除原分页
$("#fenye").html("");
//载入新分页
$("#fenye").html(fenyeHtml);
}
});
}
</script>
记住 里面有一个For循环 是循环前台展现的框架代码 ‘+ imgList[i].FId + ’属于展现图片或其他的代码
然后是后台的代码
也就是aspx.cs 或ashx里的代码
/// <summary>
/// 根据Type分页查询列表数据
/// </summary>
/// <param name="context"></param>
public void GetNewsByType(HttpContext context)
{
//声明一个动态类 初始化动态类
dynamic ObjJson = new ExpandoObject();
//取值 每页几条数据
int count = Convert.ToInt32(context.Request["count"]);
//取值 当前页数
int page = Convert.ToInt32(context.Request["page"]);
//取值 查询的类型
int Type = Convert.ToInt32(context.Request["Type"]);
//最小条数
int offset = (page - 1) * count;
//生命一个新的BLL方法
Maticsoft.BLL.T_News newsBll = new Maticsoft.BLL.T_News();
//总条数从0开始
int total = 0;
ObjJson.rows = newsBll.GetNewsByType(count, offset, Type, out total);
ObjJson.total = total;
context.Response.Write(JsonConvert.SerializeObject(ObjJson));
context.Response.End();
}
然后是BLL源码
/// <summary>
/// 前台根据Type分页查询T_News数据
/// </summary>
/// <param name="limit">每页的条数</param>
/// <param name="offset">当前第几页</param>
/// <param name="Type">类型</param>
/// <param name="total">总条数</param>
/// <returns></returns>
public DataTable GetNewsByType(int limit, int offset, int Type, out int total)
{
return dal.GetNewsByType(limit, offset, Type, out total);
}
最后是DAL源码 一定要写正确SQL语句
/// <summary>
/// 前台根据Type分页查询T_News数据
/// </summary>
/// <param name="limit">每页的条数</param>
/// <param name="offset">当前第几页</param>
/// <param name="Type">类型</param>
/// <param name="total">总条数</param>
/// <returns></returns>
public DataTable GetNewsByType(int limit, int offset, int Type, out int total)
{
string sql = "select top (@limit) * from (select row_number() over(order by FId desc) as rownumber,*from T_News where FType = @FType)as temp_row where rownumber> @offset ";
string totalsql = "select COUNT(1) from T_News where FType = @Ftype";
total = Convert.ToInt32(SqlHelper.ExecuteScalar(SqlHelper.connStr, totalsql, new SqlParameter[]
{
new SqlParameter("@FType",Type)
}));
SqlParameter[] para = new SqlParameter[]
{
new SqlParameter("@limit",SqlDbType.Int),
new SqlParameter("@offset",SqlDbType.Int),
new SqlParameter("@FType",Type)
};
para[0].Value = limit;
para[1].Value = offset;
para[2].Value = Type;
return SqlHelper.ExecuteDataTable(SqlHelper.connStr, sql, para);
}
格式写对 传的类型数据不能是中文 中文容易乱码
下面是效果图

新手 写的不好 多多谅解