AJAX分页的代码(后台asp.net)


Posted in Javascript onFebruary 14, 2011

在ASP.NET 中有很多数据展现的控件,比如用的最多的GridView,它同时也自带了分页的功能。但是我们知道用GridView来显示数据,如果没有禁用ViewState,页面的大小会是非常的大的。而且平时我们点击首页,下一页,上一页,尾页这些功能都是会引起页面回发的,也就是需要完全跟服务器进行交互,来回响应的时间,传输的数据量都是很大的。AJAX的分页可以很好的解决这些问题。
开发的坏境是:jQuery AJAX+Northwind。
具体的步骤:
SearchCustomer.aspx:

<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
<script type="text/javascript"> 
var pageIndex = 0; 
var pageSize = 10; 
$(function () { 
$("#btnSearch").click(function () { 
/* 
name 顾客的名字, 文本框中输入的内容 
0 表示的是第1页 
10 每页的大小 
*/ 
var name = $("#txtSearch").val(); 
pageIndex = 0; 
AjaxGetData(name, pageIndex, pageSize); 
}); 
}); 
function AjaxGetData(name, index, size) { 
$.ajax({ 
url: "jQueryPaging.aspx", 
type: "Get", 
data: "Name=" + name + "&PageIndex=" + index + "&PageSize=" + size, 
dataType: "json", 
success: function (data) { 
var htmlStr = ""; 
htmlStr += "<table>" 
htmlStr += "<thead>" 
htmlStr += "<tr><td>CustomerID</td><td>CompanyName</td><td>ContactName</td><td>ContactTitle</td><td>Address</td><td>City</td></tr>" 
htmlStr += "</thead>"; 
htmlStr += "<tbody>" 
for (var i = 0; i < data.Customers.length; i++) { 
htmlStr += "<tr>"; 
htmlStr += "<td>" + data.Customers[i].CustomerID + "</td>" 
+ "<td>" + data.Customers[i].CompanyName + "</td>" 
+ "<td>" + data.Customers[i].ContactName + "</td>" 
+ "<td>" + data.Customers[i].ContactTitle + "</td>" 
+ "<td>" + data.Customers[i].Address + "</td>" 
+ "<td>" + data.Customers[i].City + "</td>" 
htmlStr += "</tr>"; 
} 
htmlStr += "</tbody>"; 
htmlStr += "<tfoot>"; 
htmlStr += "<tr>"; 
htmlStr += "<td colspan='6'>"; 
htmlStr += "<span>共有记录" + data.Count + ";共<span id='count'>" + (data.Count % 10 == 0 ? parseInt(data.Count / 10) : parseInt(data.Count / 10 + 1)) + "</span>页" + "</span>"; 
htmlStr += "<a href='javascript:void' onclick='GoToFirstPage()' id='aFirstPage' >首 页</a>   "; 
htmlStr += "<a href='javascript:void' onclick='GoToPrePage()' id='aPrePage' >前一页</a>   "; 
htmlStr += "<a href='javascript:void' onclick='GoToNextPage()' id='aNextPage'>后一页</a>   "; 
htmlStr += "<a href='javascript:void' onclick='GoToEndPage()' id='aEndPage' >尾 页</a>   "; 
htmlStr += "<input type='text' /><input type='button' value='跳转' onclick='GoToAppointPage(this)' /> "; 
htmlStr += "</td>"; 
htmlStr += "</tr>"; 
htmlStr += "</tfoot>"; 
htmlStr += "</table>"; 
$("#divSearchResult").html(htmlStr); 
}, 
error: function (XMLHttpRequest, textStatus, errorThrown) { 
alert(XMLHttpRequest); 
alert(textStatus); 
alert(errorThrown); 
} 
}); 
} 
//首页 
function GoToFirstPage() { 
pageIndex = 0; 
AjaxGetData($("#txtSearch").val(), pageIndex, pageSize); 
} 
//前一页 
function GoToPrePage() { 
pageIndex -= 1; 
pageIndex = pageIndex >= 0 ? pageIndex : 0; 
AjaxGetData($("#txtSearch").val(), pageIndex, pageSize); 
} 
//后一页 
function GoToNextPage() { 
if (pageIndex + 1 < parseInt($("#count").text())) { 
pageIndex += 1; 
} 
AjaxGetData($("#txtSearch").val(), pageIndex, pageSize); 
} 
//尾页 
function GoToEndPage() { 
pageIndex = parseInt($("#count").text()) - 1; 
AjaxGetData($("#txtSearch").val(), pageIndex, pageSize); 
} 
//跳转 
function GoToAppointPage(e) { 
var page = $(e).prev().val(); 
if (isNaN(page)) { 
alert("请输入数字!"); 
} 
else { 
var tempPageIndex = pageIndex; 
pageIndex = parseInt($(e).prev().val())-1; 
if (pageIndex < 0 || pageIndex >= parseInt($("#count").text())) { 
pageIndex = tempPageIndex; 
alert("请输入有效的页面范围!"); 
} 
else { 
AjaxGetData($("#txtSearch").val(), pageIndex, pageSize); 
} 
} 
} 
</script>

数据的传输用的JSON格式。大家知道JSON是轻量级别的数据传输。前台的展现时用的table。这样生成的HTML代码很简洁。
HTML如下:
<div> 
<input type="text" id="txtSearch" /> 
<input type="button" id="btnSearch" value="Search" /> 
</div> 
<div id="divSearchResult"> 
</div>

jQueryPaging.aspx页面的CS代码如下:
public partial class jQueryPaging : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
Int32 pageIndex=Int32.MinValue; 
Int32 pageSize=Int32.MinValue; 
String name=String.Empty; 
JavaScriptSerializer jss=new JavaScriptSerializer(); 
if(Request["Name"]!=null) 
{ 
name=Request["Name"].ToString(); 
if (Request["PageIndex"] != null) 
{ 
pageIndex = Int32.Parse(Request["PageIndex"].ToString()); 
pageSize = Request["PageSize"] != null ? Int32.Parse(Request["PageSize"].ToString()) : 10; 
IList<Customer> customersLists = new List<Customer>(); 
Customer c = null; 
DataSet ds= LookDataFromDB(name,pageIndex,pageSize); 
foreach (DataRow row in ds.Tables[0].Rows) 
{ 
c = new Customer(); 
c.CustomerID = row["CustomerID"].ToString(); 
c.CompanyName = row["CompanyName"].ToString(); 
c.ContactName = row["ContactName"].ToString(); 
c.ContactTitle = row["ContactTitle"].ToString(); 
c.Address = row["Address"].ToString(); 
c.City = row["City"].ToString(); 
customersLists.Add(c); 
} 
if (customersLists.Count>0) 
{ 
Response.Write("{\"Count\":"+ds.Tables[1].Rows[0][0]+",\"Customers\":"+jss.Serialize(customersLists)+"}"); 
Response.End(); 
} 
} 
} 
} 
private DataSet LookDataFromDB(string name, int pageIndex, int pageSize) 
{ 
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); 
conn.Open(); 
SqlCommand cmd = new SqlCommand(); 
cmd.Connection = conn; 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.CommandText = "SearchCustomerByName"; 
cmd.Parameters.Add(new SqlParameter("@name",name)); 
cmd.Parameters.Add(new SqlParameter("@pageIndex",pageIndex)); 
cmd.Parameters.Add(new SqlParameter("@pageSize", pageSize)); 
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd); 
DataSet ds = new DataSet(); 
try 
{ 
dataAdapter.Fill(ds); 
} 
catch (Exception) 
{ 
} 
finally 
{ 
if (dataAdapter != null) 
{ 
dataAdapter.Dispose(); 
} 
if (cmd != null) 
{ 
cmd.Dispose(); 
} 
if (conn != null) 
{ 
conn.Dispose(); 
} 
} 
return ds; 
} 
}

还有我们在CS中定义的Model类:
public class Customer 
{ 
public String CustomerID { get; set; } 
public String CompanyName { get; set; } 
public String ContactName { get;set;} 
public String ContactTitle { get; set; } 
public String Address { get; set; } 
public String City { get; set; } 
} 
SearchCustomerByName 存储过程的代码如下: 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
Create PROCEDURE SearchCustomerByName 
@name nvarchar(30), 
@pageIndex int, 
@pageSize int 
AS 
BEGIN 
SET NOCOUNT ON; 
select t.CustomerID,t.CompanyName,t.ContactName,t.ContactTitle,t.Address,t.City from 
( 
select Row_Number() over (order by CustomerID) AS RowNum,* from Customers where ContactName like '%'+@name+'%' 
) t 
where t.RowNum between @pageIndex*10+1 and (@pageIndex+1)*10 
select count(*) from Customers 
where ContactName like '%'+@name+'%' 
END 
GO

具体的效果,大家可以把上述的代码响应的复制到VS中和数据库中,进行演示。
这个版本其实很多的功能点都是没有考虑到的,仅仅是个示例,大家可以在自己的实际项目中修改以上的功能来满足自己的需求。
Javascript 相关文章推荐
基于jQuery的图片剪切插件
Aug 03 Javascript
学习JavaScript的最佳方法分享
Oct 21 Javascript
基于jquery的无限级联下拉框js插件
Oct 29 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
Apr 08 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
Dec 03 Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
May 16 Javascript
jQuery grep()方法详解及实例代码
Oct 30 Javascript
parabola.js抛物线与加入购物车效果的示例代码
Oct 25 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
Nov 25 Javascript
javascript-hashchange事件和历史状态管理实例分析
Apr 18 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 Vue.js
基于jquery的图片的切换(以数字的形式)
Feb 14 #Javascript
jquery isType() 类型判断代码
Feb 14 #Javascript
jquery isEmptyObject判断是否为空对象的函数
Feb 14 #Javascript
jquery each()源代码
Feb 14 #Javascript
jquery trim() 功能源代码
Feb 14 #Javascript
jquery uaMatch源代码
Feb 14 #Javascript
AJAX 网页保留浏览器前进后退等功能
Feb 12 #Javascript
You might like
PHP 中执行系统外部命令
2006/10/09 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
php class类的用法详细总结
2013/10/17 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
php中memcache 基本操作实例
2015/05/17 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
用js编写留言板
2020/03/17 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
Python之时间和日期使用小结
2019/02/14 Python
python selenium 弹出框处理的实现
2019/02/26 Python
Python中如何导入类示例详解
2019/04/17 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
应届生妇产科护士求职信
2013/10/27 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
护士工作失误检讨书
2014/09/14 职场文书
商务邀请函
2015/01/30 职场文书
教务处干事工作总结
2015/08/14 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby