上次介绍了我们代码写的刷新分页,这次就来说说无刷新分页。

这次我们是在上次的基础上改动了一些,我们都知道想要无刷新,就需要Ajax,在我们的ASP.NET中AJax是和一般处理程序配合着用的。

无刷新就只在我们的两个位子,一个是呈现数据的位子,另一个则是在分页里面。

也就是:

和

我们点不同的页码是换掉这两个位子就OK了。

原理:

1, 换分页字符串

还记不记我们的分页怎么来的?对,就是一串字符,我们再后台拼接的,我们点页码时去访问处理程序,然后返回一个分页字符串,我们把分页字符串在重新插入分页里面,那么分页里面的页码就会随之改变,我们的第一个大问题解决。

2,换数据

字符串在后台返回的,那我们的数据也可以从后台返回,然后在前台把下面显示数据的tr换掉就可以了。

总:后台返回我们需要的数据,在页面上替换原来的数据就可以实现我们的无刷新了。

页面

 <form id="form1" runat="server">
<div>
<asp:GridView runat="server" AutoGenerateColumns="False" DataKeyNames="ID" ID="gvTest">
<Columns>
<asp:BoundField DataField="ID" HeaderText="编号" InsertVisible="False" ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="FileName" HeaderText="文件名" SortExpression="FileName" /> <asp:BoundField DataField="Problems" HeaderText="问题" SortExpression="Problems" />
<asp:BoundField DataField="FamilyBackground" HeaderText="家庭背景" SortExpression="FamilyBackground" />
<asp:BoundField DataField="FamilySpecify" HeaderText="家庭特点" SortExpression="FamilySpecify" />
<asp:BoundField DataField="Academically" HeaderText="What" SortExpression="Academically" />
<asp:BoundField DataField="Classmates" HeaderText="Classmates" SortExpression="Classmates" />
<asp:BoundField DataField="Teaching" HeaderText="教育" SortExpression="Teaching" />
<asp:BoundField DataField="Adaptability" HeaderText="能力" SortExpression="Adaptability" />
</Columns>
</asp:GridView> //最终会生成表格
<br /> //分页
<div class="page">
<div class="details">
<span>每页<font><%=PageSize %></font>条</span> <span>共<font><%=PageCount %></font>条记录</span>
</div>
<div id="PageContent" class="paging" runat="server">
</div> </div> </div>
<script src="jquery-1.11.2.min.js"></script>
<script>
function Jump(b,c,d) { //跳转方法
var a = $("#textPage").val(); //当前页码
GetPage(a,b,c,d); //把当前页赋值后传过来
} function GetPage(a, b, c, d) {
$.ajax({
type: "post",
url: "PageHandler.ashx?PageIndex=" + a,
datatype: "json",
data: "PageSize=" + b + "&PageCount=" + c + "&CentSize=" + d,
async: false,
success: function (data) {
注: eval(data)这样转型在此处用不了
var obj = $.parseJSON(data); //转成josn格式
console.log(obj); //查看下你要的数据是不是对的
$("#PageContent").empty();//把原来的分页删除
$("#PageContent").append(obj.str); //换上我们更新后的字符串 $("#gvTest tr:gt(1)").remove();//除了头不用移除其余都移除 var strHtml = "\r\n"; $.each(obj.pageList, function (i, item) {
var FileName = item.FileName == null ? "" : item.FileName;
var Problems = item.Problems == null ? "" : item.Problems;
var FamilyBackground = item.FamilyBackground == null ? "" : item.FamilyBackground;
var FamilySpecify = item.FamilySpecify == null ? "" : item.FamilySpecify;
var Academically = item.Academically == null ? "" : item.Academically;
var Classmates = item.Classmates == null ? "" : item.Classmates;
var Teaching = item.Teaching == null ? "" : item.Teaching;
var Adaptability = item.Adaptability == null ? "" : item.Adaptability;

//拼接我们新的数据
strHtml += "<tr>\r\n";
strHtml += "<td>" + item.ID + "</td><td>" + FileName + "</td>";
strHtml += "<td>" + Problems + "</td><td>" + FamilyBackground + "</td>";
strHtml += "<td>" + FamilySpecify + "</td><td>" + Academically + "</td>";
strHtml += "<td>" + Classmates + "</td><td>" + Teaching + "</td>";
strHtml += "<td>" + Adaptability + "</td>\r\n";
strHtml += "</tr>\r\n";
})
$("#gvTest").append(strHtml); //添加进来 },
erro: function () {
alert("出错了");
} })
}
</script>
</form>

我们返回的Josn格式

样式:

        .page {
width: %;
float: left;
margin: -1px ;
background: #C9E4FF;
} .details {
height: 26px;
float: left;
padding: 16px 16px 16px;
} .details span {
height: 26px;
line-height: 26px;
float: left;
padding: 5px ;
} .details span font {
padding: 5px;
} .paging {
height: 26px;
float: right;
padding: 16px 16px 16px ;
} .paging a {
height: 26px;
float: left;
line-height: 26px;
padding: 9px;
margin: 6px;
background: #FFF;
border-radius: 2px;
} .paging span {
height: 26px;
float: left;
line-height: 26px;
padding: 10px;
margin: 6px;
} .paging span.opt {
background: #009EFF;
color: #FFF;
} .paging a:hover {
text-decoration: none;
} .paging input {
width: 58px;
height: 26px;
float: left;
margin: 6px;
text-align: center; /* border:1px solid #D2D7DD; border-right:0px;*/
} .paging a.res {
height: 26px;
float: left;
color: #FFF;
line-height: 26px;
margin: 0px;
border: 0px;
background: #009EFF;
border-radius: 2px 2px ;
} .paging a.res:hover {
background: #00B6EC;
} .paging span.cpb {
background: #009EFF;
color: #FFF;
} .paging span.disabled, .paging span.disabled {
height: 26px;
float: left;
line-height: 26px;
padding: 9px;
margin: 6px;
background: #FFF;
} #gvTest tr th {
width:%;
}

后台:  主要第一次呈现数据

  protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//点的是第几页
PageIndex = Request.QueryString["PageIndex"] == null ? : Convert.ToInt32(Request.QueryString["PageIndex"].ToString());
Binds();
}
} void Binds()
{
SqlConnection conn = new SqlConnection(conStr);
SqlDataAdapter sdas = new SqlDataAdapter("select count(*) from Boda_Follow", conStr);
DataSet da = new DataSet();
sdas.Fill(da);
//string textPage = hfPage.Value; 跳转的值
//总记录数
PageCount =Convert.ToInt32(da.Tables[].Rows[][].ToString()); //计算总页数
if (PageCount % PageSize == )
{
TotalPage = PageCount / PageSize;
}
else
{
TotalPage = (PageCount / PageSize) + ;
} //SQL语句
string sql = "select top " + PageSize + "* from Boda_Follow where ID not in (select top " + PageSize * (PageIndex - ) + " ID from Boda_Follow)";
SqlDataAdapter sda = new SqlDataAdapter(sql, conStr);
DataSet ds = new DataSet();
sda.Fill(ds);
gvTest.DataSource = ds.Tables[];
gvTest.DataBind();
PageContent.InnerHtml = TestPage.OutPageList(this.PageSize,this.PageIndex, this.PageCount, );
//var dd =new { data = "1", dd = 2 };
}

我们第一次的分页字符串

    #region 显示分页
/// <summary>
/// 返回分页页码
/// </summary>
/// <param name="pageSize">页面大小</param>
/// <param name="pageIndex">当前页</param>
/// <param name="totalCount">总记录数</param>
/// <param name="linkUrl">链接地址,__id__代表页码</param>
/// <param name="centSize">中间页码数量</param>
/// <returns></returns>
public static string OutPageList(int pageSize, int pageIndex, int totalCount, int centSize)
{
string aa = pageSize + "," + totalCount + "," + centSize;
//计算页数
if (totalCount < || pageSize < )
{
return "";
}
int pageCount = totalCount / pageSize; if (totalCount % pageSize > )
{
pageCount += ;
}
if (pageCount < )
{
return "";
}
StringBuilder pageStr = new StringBuilder();

string firstBtn = "<a href=\"javascript:GetPage(" +(pageIndex-1)+","+aa+ ")\">«上一页</a>";;
           string lastBtn = "<a href=\"javascript:GetPage(" +(pageIndex+1)+","+aa+ ")\">下一页»</a>";
       string firstStr = "<a href=\"javascript:GetPage(" +1+","+aa+ ")\">1</a>";
      string lastStr = "<a href=\"javascript:GetPage(" +pageCount+","+aa+ ")\">" + pageCount.ToString() + "</a>";

        string textPage = "<input id=\"textPage\"  value=\"" + pageIndex + "\" type=\"text\">";
string JumpPage = "<a class=\"res\" href=\"javascript:Jump("+ aa + ")\">跳转</a>"; if (pageIndex <= )
{
firstBtn = "<span class=\"disabled\">«上一页</span>";
}
if (pageIndex >= pageCount)
{
lastBtn = "<span class=\"disabled\">下一页»</span>";
}
if (pageIndex == )
{
firstStr = "<span class=\"cpb\">1</span>";
}
if (pageIndex == pageCount && pageCount > )
{
lastStr = "<span class=\"cpb\">" + pageCount.ToString() + "</span>";
}
else if (pageCount == )
{
lastStr = "";
}
int firstNum = pageIndex - (centSize / ); //中间开始的页码
if (pageIndex < centSize)
firstNum = ;
int lastNum = pageIndex + centSize - ((centSize / ) + ); //中间结束的页码
if (lastNum >= pageCount)
lastNum = pageCount - ;
pageStr.Append(firstBtn + firstStr);
if (pageIndex >= centSize)
{
pageStr.Append("<span>...</span>\n");
}
for (int i = firstNum; i <= lastNum; i++)
{
if (i == pageIndex)
{
pageStr.Append("<span class=\"cpb\">" + i + "</span>");
}
else
{
pageStr.Append("<a href=\"javascript:GetPage(" +i+","+ aa + ")\">" + i + "</a>");
}
}
if (pageCount - pageIndex > centSize - ((centSize / )))
{
pageStr.Append("<span>...</span>");
}
pageStr.Append(lastStr + lastBtn);
pageStr.Append(textPage);
pageStr.Append(JumpPage);
return pageStr.ToString();
}

处理程序

需要引用,这个需要去网上下载的

    public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
int PageIndex = Convert.ToInt32(context.Request.QueryString["PageIndex"]); //当前页码
int PageSize = Convert.ToInt32(context.Request.Form["PageSize"]); //每页大小
int PageCount = Convert.ToInt32(context.Request.Form["PageCount"]);//总记录数
int CentSize = Convert.ToInt32(context.Request.Form["CentSize"]); //中间显示多少个 string strPage = strHtml(PageSize, PageIndex, PageCount, CentSize); string sql = "select top " + PageSize + "* from Boda_Follow where ID not in (select top " + PageSize * (PageIndex - ) + " ID from Boda_Follow)";
SqlDataAdapter sda = new SqlDataAdapter(sql, conStr);
DataSet ds = new DataSet();
sda.Fill(ds); var data = new { str = strPage,pageList=ds.Tables[]}; //json数据格式,我们再前台转换就可以用
context.Response.Write(JsonConvert.SerializeObject(data));
  /// <summary>
/// 分页字符串
/// </summary>
/// <param name="pageSize">每页显示多少个</param>
/// <param name="pageIndex">当前页码</param>
/// <param name="totalCount">总记录数</param>
/// <param name="centSize">中间显示多少个页码</param>
/// <returns>分页字符串</returns>
public string strHtml(int pageSize, int pageIndex, int totalCount, int centSize)
{
string aa = pageSize + "," + totalCount + "," + centSize; //我们传递的参数
//计算页数
if (totalCount < || pageSize < )
{
return "";
}
int pageCount = totalCount / pageSize; if (totalCount % pageSize > )
{
pageCount += ;
}
if (pageCount < )
{
return "";
}
StringBuilder pageStr = new StringBuilder(); string firstBtn = "<a href=\"javascript:GetPage(" +(pageIndex-)+","+aa+ ")\">«上一页</a>";;
string lastBtn = "<a href=\"javascript:GetPage(" +(pageIndex+)+","+aa+ ")\">下一页»</a>";
string firstStr = "<a href=\"javascript:GetPage(" ++","+aa+ ")\">1</a>";
string lastStr = "<a href=\"javascript:GetPage(" +pageCount+","+aa+ ")\">" + pageCount.ToString() + "</a>"; string textPage = "<input id=\"textPage\" value=\"" + pageIndex + "\" type=\"text\">";
string JumpPage = "<a class=\"res\" href=\"javascript:Jump("+ aa + ")\">跳转</a>"; if (pageIndex <= )
{
firstBtn = "<span class=\"disabled\">«上一页</span>";
}
if (pageIndex >= pageCount)
{
lastBtn = "<span class=\"disabled\">下一页»</span>";
}
if (pageIndex == )
{
firstStr = "<span class=\"cpb\">1</span>";
}
if (pageIndex == pageCount && pageCount > )
{
lastStr = "<span class=\"cpb\">" + pageCount.ToString() + "</span>";
}
else if (pageCount == )
{
lastStr = "";
}
int firstNum = pageIndex - (centSize / ); //中间开始的页码
if (pageIndex < centSize)
firstNum = ;
int lastNum = pageIndex + centSize - ((centSize / ) + ); //中间结束的页码
if (lastNum >= pageCount)
lastNum = pageCount - ;
pageStr.Append(firstBtn + firstStr);
if (pageIndex >= centSize)
{
pageStr.Append("<span>...</span>\n");
}
for (int i = firstNum; i <= lastNum; i++)
{
if (i == pageIndex)
{
pageStr.Append("<span class=\"cpb\">" + i + "</span>");
}
else
{
pageStr.Append("<a href=\"javascript:GetPage(" + i+","+ aa + ")\">" + i + "</a>");
}
}
if (pageCount - pageIndex > centSize - ((centSize / )))
{
pageStr.Append("<span>...</span>");
}
pageStr.Append(lastStr + lastBtn);
pageStr.Append(textPage);
pageStr.Append(JumpPage);
return pageStr.ToString(); }

你点页码就是无刷新的了。 上篇 自定义ASP.NET中刷新分页

ASP.NET中无刷新分页的更多相关文章

  1. ASP.NET—015:ASP.NET中无刷新页面实现

    原文作者:杨友山 原文地址:http://blog.csdn.net/yysyangyangyangshan/article/details/39679823 前面也说过在asp.net中前后前交互的 ...

  2. ASP.Net中无刷新执行Session身份验证

    在写一个客户的B/S结构应用程序时,突然发现一个技巧,不知道是否是MS的一个BUG,给相关的有研究的朋友原先考虑写一个检查Session的类,Session失效后,必须转向登陆页面,可每一个调用该类的 ...

  3. 实现Asp.Net MVC无刷新分页

    整个过程主要就是:一开始进入页面是,在页面加载完成之后直接通过$(function(){  LoadRegisterUserInfo(1,10,0,0);//加载注册用户信息 });无条件加载数据,调 ...

  4. 在Thinkphp中使用AJAX实现无刷新分页

    在Thinkphp目录的Lib\ORG\Util\目录里新建AjaxPage.class.php,写入一下内容: <?php // +------------------------------ ...

  5. asp.net MVC4 +MVCpager 无刷新分页

    本人菜鸟,最近在用MVC4和MVCpager做无刷新分页时,发现点击下一页时数据不是Ajax提交的,弄了好久终于找到原因,原来还是Jquery引用的问题,现在把代码粘出来,希望能帮到刚接触的程序员,第 ...

  6. ASP.NET Ajax简单的无刷新分页

    最近练习了一些AJAX无刷新分页,写得比较简单,性能不知道怎么样,求大神指点,如有更好的分页提供,欢迎交流! 发话不多说了,直接上代码! 首先从网上下了一个JS分页,感觉挺好用的 (function( ...

  7. asp.net练习②——Paginaton无刷新分页

    aspx代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server" ...

  8. 自己动手用Javascript写一个无刷新分页控件

    .NET技术交流群:337901356 ,欢迎您的加入! 对 于一个用户体验好的网站来说,无刷新技术是很重要的,无刷新,顾名思义,就是局部刷新数据,有用过Asp.net Web Form技术开发网页的 ...

  9. Repeater 无刷新分页

    原文:http://blog.csdn.net/Sandy945/archive/2009/05/22/4208998.aspx 本文讲述的是如何利用 XMLHttpRequest 来对 Repeat ...

随机推荐

  1. SourceInsight,Understand,SecureCRT设置

    SourceInsight 设置字体 Option/Document  Option/Screen  Fonts   Understand https://scitools.com/download/ ...

  2. 局部安装webpack时,使用webpack命令时提示webpack不是内部命令解决方法

    现在js发展太快了,根本看不懂啊.于是乎想做做功课,于是乎看到了这些“奇怪”的写法,原来好多都是遵循了 ECMASCRIPT6,好吧,在本地看看怎么用的吧.写在本地的环境下, 发现各种报错,根本不能用 ...

  3. 386. Lexicographical Numbers 把1--n按字典序排序

    https://leetcode.com/problems/lexicographical-numbers/description/ 前20个是 1, 10, 11, 12, 13, 14, .... ...

  4. UGUI 用手柄或者键盘控制选择Scroll View中的游戏对象时,滚动条跟着移动

    原预制体以及脚本的下载地址:https://download.csdn.net/download/qq_15017279/10404010 1.新建一个Scroll View,删掉横向的滚动条,并且把 ...

  5. Windows下Redis数据库管理工具(redis-desktop-manager)安装与配置(图文详解)

    Redis Desktop Manager安装 Redis Desktop Manager直接下载安装就行非常简单.下载地址: 官网下载:https://redisdesktop.com/downlo ...

  6. 《nginx 四》双机主从热备

    lvs+keepalived+nginx实现高性能负载均衡集群 LVS作用 LVS是一个开源的软件,可以实现传输层四层负载均衡.LVS是Linux Virtual Server的缩写,意思是Linux ...

  7. 如何在smarty模板中执行php代码

    Smarty模板主要的目的是分离逻辑层和表现层,所以在模板中不应该包含逻辑部分,逻辑层也不应该含有HTML.要在模板中插入逻辑程序的这种做法"非常"不被推荐,在你的case中. 如 ...

  8. HDU 2121——Ice_cream’s world II——————【最小树形图、不定根】

    Ice_cream’s world II Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  9. js获取日期:前天、昨天、今天、明天、后天

    前天,昨天,今天,明天,后天 <html> <head> <meta http-equiv="Content-Type" content=" ...

  10. SSL、数字签名、CA 工作原理

    SSL.数字签名.CA 工作原理 对称加密和非对称加密介绍和区别 什么是对称加密技术?   对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方 ...