简单起见,数据库操作用ADO.NET 实体数据模型,直接用ashx操作实体模型,中间没有采用model层。
Index.html文件内容仅修改了Ajax的文件链接,没有太大变化:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajax分页显示实例_纯静态页方式</title>
<link href="Styles/pagination.css" rel="stylesheet" type="text/css" />
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script src="Scripts/jquery.pagination.js" type="text/javascript"></script>
</head>
<body>
<!--列表内容显示区域-->
<table width="1000" border="0" cellspacing="0" id="List">
<tr class="ListTitle"><td>ID</td><td>书名</td><td>ISBN</td><td>单价</td><td>出版社</td><td>出版时间</td></tr>
</table>
<!--分页导航条显示区域-->
<div id="Pagination" class="pagination"></div>
</body>
</html>
<script type="text/javascript">
var num_entries = 0; //一共多少条记录
var ListItemNum = 15; //每页显示多少条信息
$(function () {
//异步获取记录总数
$.get("BookListService.ashx", { "Action": "GetRecordCount" }, function (result) {
num_entries = result;
Pagination();//创建分页
});
});
// 创建分页
function Pagination() {
$("#Pagination").pagination(num_entries, {
num_edge_entries: 1, //边缘页数
num_display_entries: 10, //主体页数
callback: paginationCallback, //回调函数
items_per_page: ListItemNum, //每页显示多少项
prev_text: "前一页",
next_text: "后一页"
});
}
//显示数据
function paginationCallback(page_index, jq) {
$.get("BookListService.ashx", { "Action": "GetPageList", "PageIndex": page_index, "ListItemNum": ListItemNum }, function (result) {
var str = "";
result=eval("("+result+")");
$.each(result, function () {
str += "<tr><td>"+this.Id+"</td><td>"+this.BookTitle+"</td><td>"+this.ISBN+"</td><td>"+this.Price+"</td><td>"+this.Publish+"</td><td>"+this.Published+"</td></tr>";
});
$("#List tr:gt(0)").remove();
$("#List").append(str);
})
}
</script>
BookListService.ashx文件内容:
<%@ WebHandler Language="C#" Class="BookListService" %>
using System;
using System.Web;
using BookProjectModel;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Linq;
using System.Text;
public class BookListService : IHttpHandler {
BookProjectEntities db = new BookProjectEntities();
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string action = context.Request["Action"];
int listItemNum = Convert.ToInt16(context.Request["ListItemNum"]);
int pageIndex = Convert.ToInt16(context.Request["PageIndex"]);
if (action == "GetRecordCount")
{
context.Response.Write(db.Books.Count());
}
else if (action == "GetPageList")
{
var list = db.Books
.OrderBy(s => s.Id)
.Skip((pageIndex) * listItemNum)
.Take(listItemNum)
.Select(m => new BookJson
{
Id = m.Id,
BookTitle = m.BookTitle,
ISBN = m.ISBN,
Price = (decimal)m.Price,
Publish = m.Publish,
Published = m.Published
})
.ToList();
string jsonString = JsonSerializer<List<BookJson>>(list);
context.Response.Write(jsonString);
}
}
public bool IsReusable {
get {
return false;
}
}
/// <summary>
/// 序列化json
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}
/// <summary>
/// 定义BookJson
/// </summary>
[DataContract(Namespace = "")]
public class BookJson
{
[DataMember(Order = 0)]
public int Id { get; set; }
[DataMember(Order = 1)]
public string BookTitle { get; set; }
[DataMember(Order = 2)]
public decimal Price { get; set; }
[DataMember(Order = 3)]
public string ISBN { get; set; }
[DataMember(Order = 4)]
public string Publish { get; set; }
[DataMember(Order = 5)]
public string Published { get; set; }
}
}
说明一下,其中BookProjectEntities是由实体模型自动生成的。数据库操作采用LinQ TO Entity.
在visual studio 2010 .net framework 4.0下调试通过。
代码打包下载: 点击下载