ASP.Net:异步请求分页示例:Handler.ashx + $.ajax() + Json + 分页处理
2012-04-05 15:53
926 查看
今天闲来无事,把项目中用到异步数据读取加分页数理的步骤方法整理成Demo;贴出示例代码供需要的同学照搬套用。也可以根据实际需要做相关处理修改;相信会给你带来一定的便利之处。这个示例用到四个文件;Default.aspx、CustomerPager.ascx、AjaxHandler.ashx、jquery.js;这四个文件相信大家一眼就晓得是干嘛用的了。就不多说了。首先先来看看Default.aspx页面前端代码:
再看看CustomerPager.ascx用户控件:很简单,就是分页控件,但没有后端代码的;里面调用的js函数是在Default.aspx页面里。
再看看AjaxHandler.ashx相关处理方法:
jquery.js这个文件就不多说了。
希望能给你的开发带来一定的便利。O(∩_∩)O~ 源码示例Demo这里下载。
Kevin.Chen
2012-04-05
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Demo._Default" %> <%@ Register Src="CustomerPager.ascx" TagName="CustomerPager" TagPrefix="uc1" %> <!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 runat="server"> <title></title> <script src="javascript/jQuery/jquery.js" type="text/javascript"></script> <script type="text/javascript"> //1.1、刷新页面 function refreshPage() { var pageIndex = $("[id$='_pagerSelector']")[0].selectedIndex; pageIndex = pageIndex < 0 ? 0 : pageIndex; refreshGrid(pageIndex); } //1.2、刷新列表 function refreshGrid(pageIndex) { var ajaxPara = "pageIndex=" + pageIndex + "&pageSize=20"; var ajaxPage = "AjaxHandler.ashx?" + ajaxPara; var jsonData = ajaxCall(ajaxPage, null); setPagerInfo(jsonData.totalCount, pageIndex); var grid = document.getElementById("gridData"); if (grid.rows.length > 1) { for (var i = grid.rows.length - 1; i > 0; i--) { grid.deleteRow(i); } } for (var i = 0; i < jsonData.list.length; i++) { var newRow = grid.insertRow(i + 1); newRow.insertCell(0).innerHTML = jsonData.list[i].id; newRow.insertCell(1).innerHTML = jsonData.list[i].name; newRow.insertCell(2).innerHTML = jsonData.list[i].age; newRow.insertCell(3).innerHTML = jsonData.list[i].sex; newRow.align = "center"; newRow.bgColor = (i % 2 == 0 ? "#FFFFFF" : "#C6FBFF"); //隔行背景色 } } //1.3、异步取数据方法 function ajaxCall(ajaxPage, jsonData) { var options = { type: "POST", url: ajaxPage, data: jsonData, contentType: "application/json;charset=utf-8", dataType: "string", async: false, success: function(response) { }, error: function(msg) { alert("failed: " + msg); } }; var returnText = $.ajax(options).responseText; var op = eval('(' + returnText + ')'); return op; } //1.4、设置分页信息下拉框 function setPagerInfo(totalCount, pageIndex) { var pagers = $("[id$='_pagerSelector']"); var pagerCount = Math.ceil(parseInt(totalCount) / 20); //填充前,清除所有 for (var i = pagers[0].options.length - 1; i > -1; i--) { pagers[0].options.remove(i); pagers[1].options.remove(i); } //填充项 for (var i = 0; i < pagerCount; i++) { var oldLength = pagers[0].options.length; pagers[0].options.length = oldLength + 1; pagers[1].options.length = oldLength + 1; var option1 = new Option(i + 1, i + 1, false, true); pagers[0].options[oldLength] = option1; var option2 = new Option(i + 1, i + 1, false, true); pagers[1].options[oldLength] = option2; } $("#<%=CustomerPager1.ClientID %>_pagerCount").html(pagerCount); $("#<%=CustomerPager2.ClientID %>_pagerCount").html(pagerCount); //如果页数>1则显示并选中下拉框首项 if (pagerCount > 1) { pagers[0].options[pageIndex].selected = true; pagers[1].options[pageIndex].selected = true; $("#<%=CustomerPager1.ClientID %>_divPage").css("visibility", "visible"); $("#<%=CustomerPager2.ClientID %>_divPage").css("visibility", "visible"); } else { $("#<%=CustomerPager1.ClientID %>_divPage").css("visibility", "hidden"); $("#<%=CustomerPager2.ClientID %>_divPage").css("visibility", "hidden"); } } //1.5、分页下拉框选择 function pagerSelector_onchange(objPager) { JumpToPage(null, objPager); } //1.6、根据跳转类型跳转 function JumpToPage(type, objThis) { var objPager = objThis; var pageIndex = 0; if (type != null) { var objPager = objThis.parentNode.childNodes[3].childNodes[0]; } switch (type) { case "first": break; case "prev": pageIndex = (objPager.selectedIndex - 1) < 0 ? 0 : (objPager.selectedIndex - 1); break; case "next": pageIndex = (objPager.selectedIndex + 1) > (objPager.length - 1) ? objPager.length - 1 : (objPager.selectedIndex + 1); break; case "last": pageIndex = objPager.length - 1; break; default: pageIndex = objPager.selectedIndex; break; } refreshGrid(pageIndex, true); } //1.7、载入数据并定时刷新数据列表 $(document).ready( function() { refreshPage(); setInterval("refreshPage()", 5000); //间隔五秒重新读取数据 } ); </script> </head> <body> <form id="form1" runat="server"> <div> <table> <tr> <td> <uc1:CustomerPager ID="CustomerPager1" runat="server" /> </td> </tr> </table> <table style="width: 100%;" id="gridData" border="1" cellpadding="0" cellspacing="0"> <tr> <th> id </th> <th> Name </th> <th> Age </th> <th> Sex </th> </tr> </table> <table> <tr> <td> <uc1:CustomerPager ID="CustomerPager2" runat="server" /> </td> </tr> </table> </div> </form> </body> </html>
再看看CustomerPager.ascx用户控件:很简单,就是分页控件,但没有后端代码的;里面调用的js函数是在Default.aspx页面里。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CustomerPager.ascx.cs" Inherits="Demo.CustomerPager" %> <div id="divPage" runat="server" style="float: right; padding-top: 5px; padding-bottom: 5px;"> <table class="pager"> <tr> <td style="cursor: pointer;" onclick="JumpToPage('first', this);"> <img alt="" src="../images/pager_first.png" /> </td> <td style="cursor: pointer;" onclick="JumpToPage('prev', this);"> <img alt="" src="../images/pager_left.png" /> </td> <td> Page </td> <td> <select id="pagerSelector" runat="server" onchange="pagerSelector_onchange(this);"> </select> </td> <td> of </td> <td> <div id="pagerCount" runat="server"> </div> </td> <td style="cursor: pointer;" onclick="JumpToPage('next', this);"> <img alt="" src="../images/pager_right.png" /> </td> <td style="cursor: pointer;" onclick="JumpToPage('last', this);"> <img alt="" src="../images/pager_Last.png" /> </td> </tr> </table> </div>
再看看AjaxHandler.ashx相关处理方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Web.Script.Serialization; using System.Web.Services; namespace Demo { /// <summary> /// Summary description for $codebehindclassname$ /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class AjaxHandler : IHttpHandler { private string returnJsonData = string.Empty; private int pageIndex = 0; private int pageSize = 20; public void ProcessRequest(HttpContext context) { GetUrlParameters(context); var totalCount = 0; var pageData = new PageData(); pageData.list = GetTestList(out totalCount); pageData.totalCount = totalCount; var jsonObject = new JavaScriptSerializer(); returnJsonData = jsonObject.Serialize(pageData); context.Response.ContentType = "application/json"; context.Response.ContentEncoding = Encoding.UTF8; context.Response.Write(returnJsonData); context.Response.Flush(); context.Response.End(); } /// <summary> /// 获取参数信息 /// </summary> /// <param name="context"></param> public void GetUrlParameters(HttpContext context) { pageIndex = Convert.ToInt32(context.Request["pageIndex"]); pageSize = Convert.ToInt32(context.Request["pageSize"]); } /// <summary> /// 获取数据列表 /// </summary> /// <param name="totalCount"></param> /// <returns></returns> public List<TestEntity> GetTestList(out int totalCount) { //pageSize //pageIndex //可以根据以上这两参数值查询所需分页数据 var startIndex = pageIndex * pageSize; var endedIndex = startIndex + pageSize; totalCount = 100; var testList = new List<TestEntity>(); for (int i = startIndex; i < endedIndex; i++) { var entity = new TestEntity(); entity.id = i.ToString(); entity.name = "kevin" + i.ToString(); entity.sex = "man"; entity.age = "30"; testList.Add(entity); } return testList; } public bool IsReusable { get { return false; } } } public class TestEntity { public string id { set; get; } public string name { set; get; } public string sex { set; get; } public string age { set; get; } } public class PageData { public List<TestEntity> list { set; get; } public int totalCount { set; get; } } }
jquery.js这个文件就不多说了。
希望能给你的开发带来一定的便利。O(∩_∩)O~ 源码示例Demo这里下载。
Kevin.Chen
2012-04-05
相关文章推荐
- ASP.NET 前端AJAX请求数据及后台ashx返回json给前端。
- ASP.NET WebForm 之 Ajax 请求后端处理 概述 ASP.NET 在MVC中的用途非常广泛,操作起来也非常简单。前台请求异步请求 Controlle
- 应用HttpHandler, Json, JQuery, ASP.Net UserControl等技术处理 Ajax 的解决方案
- ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
- Asp.Net 页面请求处理之HttpHandler
- 原生JS的ajax处理json数据格式的异步请求完整例子
- Asp.net 更改Alert样式和后台注册Jquery的Ajax异步提交事件[包括处理前操作、处理后操作(注明:此方法只是作为参考,如有需要可自行修改)]
- [置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- ASP.NET AJAX 添加请求处理事件来防止按钮重复提交
- ASP.NET easyUI--datagrid 通过ajax请求ASP.NET后台数据的分页查询
- 微软ASP.NET AJAX中日期类型的JSON处理
- ASP.NET异步请求处理(Asynchronous Http Handlers)
- ASP.NET异步请求处理(Asynchronous HTTP Handlers)
- AJAX提交到Handler.ashx一般处理程序返回json数据
- asp.net- ajax简单入门使用方法,通过一般处理程序ashx进行处理
- Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- ASP.NET WebForm 之 Ajax 请求后端处理
- asp.net中利用Jquery+Ajax+Json实现无刷新分页的实例代码
- asp.net中利用Jquery+Ajax+Json实现无刷新分页
- ASP.NET MVC AJAX实现 以及如何处理json数据,简介