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

这次我们是在上次的基础上改动了一些,我们都知道想要无刷新,就需要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. 数据结构---Java---数组

    **************************************************************前言************************************ ...

  2. pip install keras==1.2.1

    [该方法仅适用于压缩包中含有setup.py的情况] 先从GitHub上找到想要下载的历史版本,右键复制链接地址. 然后执行命令: pip install https://github.com/ker ...

  3. CRLF注入攻击

      原理:http数据包通过\r\n\r\n来分开http header何http body 实现:首先这种攻击发生在应用层,且发生在服务器返回给我们的http reponse没有经过敏感字符的过滤, ...

  4. hdu 1561 树形DP n个选m个价值最大

    http://acm.hust.edu.cn/vjudge/problem/18068 #include <iostream> #include <string> #inclu ...

  5. Sharepoint2010新建一个用户的方法

    最近在做关于SharePoint的相关开发,在开发中需要用到测试用户进行相关权限的测试,所以就需要创建一个新的用户进行,但是在网上找了很久都没有找到关于创建一个新用户的资料,最后终于在http://w ...

  6. 登录mysql数据库出现 : ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) ER或者忘记密码

    1.     在安装mysql的文件目录中找到配置文件my.ini  ,然后右击用记事本打开 2.     打开后,搜索mysqld关键字 找到后,在mysqld下面添加skip-grant-tabl ...

  7. Vue.js 插件开发

    Vue.js 的插件应当有一个公开方法 install .这个方法的第一个参数是 Vue 构造器 , 第二个参数是一个可选的选项对象: MyPlugin.install = function (Vue ...

  8. easyui datagrid 表格中操作栏 按钮图标不显示

    jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染 解决办法: 使用解析器 Parser(解析器) $.parser.parse();       // 解析所有页面 $.par ...

  9. 正则表达式 \w \d 的相关解读

    在查阅很多相关正则的描述之后,发现对于\w 的释义都是指包含大 小写字母数字和下划线 相当于([0-9a-zA-Z]) (取材于经典教程 正则表达式30分钟入门教程) 但是在实际使用中发现并不是这么回 ...

  10. 移动端absolute元素居中

    <div class="db"> <div class="dm"></div> </div> .db{ widt ...