当前位置: 首页 > 图文教程 > 网络编程 > AJAX技术 > 无框架 Ajax分页(原创)

AJAX技术
PHP+AJAX教程(8):AJAX RSS阅读器
PHP+AJAX教程(9):AJAX投票
PHP教程:Ajax进行Web开发
关于Ajax技术的注意事项
iframe创建智能表单
JavaScript有趣实例:胸罩罩杯尺寸计算器
提供gif icon制作的几个站点
选择CMS五大误区误区以及CMS点评
总结 PHP xajax应用方法
网页设计中优化代码重要性
Logo设计之有所为有所不为
浅析Ajax为什么优于JSF
Bing API的简单了解
解决AJAX中文回传乱码
VS 2008完美地支持JavaScript和ASP.NET AJAX
概念网站实例:所有网页都在一个网页里
不用组件实现Ajax效果
网页制作ajax特效实例
较好的视觉效果的网页选项卡
Webjx收集jquery实现动画效果的插件和教程

AJAX技术 中的 无框架 Ajax分页(原创)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-13   浏览: 55 ::
收藏到网摘: n/a

最近想做一个Ajax的功能,网上一搜几乎全是基于某某框架的Ajax分页,要么需给页面加上<scriptManager></scriptManager>,要么需引入某dll,要么需使用类似于jquery的框架。 使用如上方法确实可以实现Ajax分页效果,但我总觉得不够简洁,研究了一下午,终于捣鼓出了点东西O_o
首先创建前台页面MyAjaxPager.aspx
复制代码 代码如下:
AjaxProcess.aspx
复制代码 代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxProcess.aspx.cs" Inherits="AjaxDemo.AjaxPager.MyAjaxPager.AjaxProcess" %>
<asp:Repeater ID="rptGrid" runat="server">
<HeaderTemplate>
<table>
<tr>
<th style="border:solid 1px red;">编号</th>
<th style="border:solid 1px red;">姓名</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td style="border:solid 1px red;"><%# Eval("Id") %></td>
<td style="border:solid 1px red;"><%# Eval("Name") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>

注意,这个Ajax处理页面的aspx部分并不像往常那样是光秃秃的,只有<% %>内的信息,它的下面多了一个repeater控件,细心的朋友会发现,这个repeater控件和主页面的repeater控件一摸一样。就是利用这个repeater控件来生成返回的html内容的,具体怎么做,请看代码:
AjaxProcess.aspx.cs
复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.IO;
namespace AjaxDemo.AjaxPager.MyAjaxPager
{
public class Item
{
public string Id
{
get;
set;
}
public string Name
{
get;
set;
}
}
public partial class AjaxProcess : System.Web.UI.Page
{
private int PageSize
{
get { return 10; }
}
private List<Item> GenerateData()
{
List<Item> lstItems = new List<Item>();
for (int i = 1; i <= 1000000; i++)
{
Item it = new Item();
it.Id = i.ToString();
it.Name = "zs" + i;
lstItems.Add(it);
}
return lstItems;
}
private List<Item> GetData(int index)
{
List<Item> lstItem = GenerateData();
List<Item> bdItem = new List<Item>();
int begIndex = (index - 1) * PageSize;
int endIndex = index * PageSize;
for (int i = begIndex; i < endIndex; i++)
{
bdItem.Add(lstItem[i]);
}
return bdItem;
}
private string GetHtml(Control control)
{
StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
HtmlTextWriter writer2 = new HtmlTextWriter(writer);
control.RenderControl(writer2);
return sb.ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
int index = 0;
if (int.TryParse(Request.QueryString["index"], out index))
{
//获取到index再进行操作
this.rptGrid.DataSource = this.GetData(index);
this.rptGrid.DataBind();
Response.Clear();
string html = this.GetHtml(rptGrid);
Response.Write(html);
Response.End();
}
}
}
}

代码相当简单,GenerateData()方法用来生成一个DataSource,GetData(int index)方法用来读取分页信息。在Page_Load事件中,会首先获取请求字符串中的index(页码),然后利用index取得当前页的信息并将它绑定到repeater控件上,然后利用GetHtml()方法来获取绑定数据后的repeater控件的html内容,将它返回。
Ok,在主页面的js中。
复制代码 代码如下:

var gridData = xmlHttp.responseText;
var grid = document.getElementById("grid");
grid.innerHTML = gridData;

我们获取返回的这段html,并将它的内容输出到主页面的制定div中,到此就成功完成了一次分页请求。
这是一个简单的demo,如果有需要,还可以加一些分页等待过程中的动画什么的,这里就不详述了。
以上东西希望可以帮助到有需要的朋友。