查询功能是开发中最重要的一个功能,大量数据的显示,我们用的最多的就是分页。

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

开发的坏境是:jQuery AJAX+Northwind。

具体的步骤:

SearchCustomer.aspx:

  1. <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
  2. <script type="text/javascript">
  3. var pageIndex = ;
  4. var pageSize = ;
  5. $(function () {
  6. $("#btnSearch").click(function () {
  7. /*
  8. name 顾客的名字, 文本框中输入的内容
  9. 0 表示的是第1页
  10. 10 每页的大小
  11. */
  12. var name = $("#txtSearch").val();
  13. pageIndex = ;
  14. AjaxGetData(name, pageIndex, pageSize);
  15. });
  16. });
  17.  
  18. function AjaxGetData(name, index, size) {
  19. $.ajax({
  20. url: "jQueryPaging.aspx",
  21. type: "Get",
  22. data: "Name=" + name + "&PageIndex=" + index + "&PageSize=" + size,
  23. dataType: "json",
  24. success: function (data) {
  25. var htmlStr = "";
  26. htmlStr += "<table>"
  27. htmlStr += "<thead>"
  28. htmlStr += "<tr><td>CustomerID</td><td>CompanyName</td><td>ContactName</td><td>ContactTitle</td><td>Address</td><td>City</td></tr>"
  29. htmlStr += "</thead>";
  30. htmlStr += "<tbody>"
  31. for (var i = ; i < data.Customers.length; i++) {
  32. htmlStr += "<tr>";
  33. htmlStr += "<td>" + data.Customers[i].CustomerID + "</td>"
  34. + "<td>" + data.Customers[i].CompanyName + "</td>"
  35. + "<td>" + data.Customers[i].ContactName + "</td>"
  36. + "<td>" + data.Customers[i].ContactTitle + "</td>"
  37. + "<td>" + data.Customers[i].Address + "</td>"
  38. + "<td>" + data.Customers[i].City + "</td>"
  39. htmlStr += "</tr>";
  40. }
  41. htmlStr += "</tbody>";
  42. htmlStr += "<tfoot>";
  43. htmlStr += "<tr>";
  44. htmlStr += "<td colspan='6'>";
  45. htmlStr += "<span>共有记录" + data.Count + ";共<span id='count'>" + (data.Count % == ? parseInt(data.Count / ) : parseInt(data.Count / + )) + "</span>页" + "</span>";
  46. htmlStr += "<a href='javascript:void' onclick='GoToFirstPage()' id='aFirstPage' >首 页</a>&nbsp;&nbsp; ";
  47. htmlStr += "<a href='javascript:void' onclick='GoToPrePage()' id='aPrePage' >前一页</a>&nbsp;&nbsp; ";
  48. htmlStr += "<a href='javascript:void' onclick='GoToNextPage()' id='aNextPage'>后一页</a>&nbsp;&nbsp; ";
  49. htmlStr += "<a href='javascript:void' onclick='GoToEndPage()' id='aEndPage' >尾 页</a>&nbsp;&nbsp; ";
  50. htmlStr += "<input type='text' /><input type='button' value='跳转' onclick='GoToAppointPage(this)' /> ";
  51. htmlStr += "</td>";
  52. htmlStr += "</tr>";
  53. htmlStr += "</tfoot>";
  54. htmlStr += "</table>";
  55.  
  56. $("#divSearchResult").html(htmlStr);
  57. },
  58. error: function (XMLHttpRequest, textStatus, errorThrown) {
  59. alert(XMLHttpRequest);
  60. alert(textStatus);
  61. alert(errorThrown);
  62. }
  63. });
  64. }
  65. //首页
  66. function GoToFirstPage() {
  67. pageIndex = ;
  68. AjaxGetData($("#txtSearch").val(), pageIndex, pageSize);
  69. }
  70. //前一页
  71. function GoToPrePage() {
  72. pageIndex -= ;
  73. pageIndex = pageIndex >= ? pageIndex : ;
  74. AjaxGetData($("#txtSearch").val(), pageIndex, pageSize);
  75. }
  76. //后一页
  77. function GoToNextPage() {
  78. if (pageIndex + < parseInt($("#count").text())) {
  79. pageIndex += ;
  80. }
  81. AjaxGetData($("#txtSearch").val(), pageIndex, pageSize);
  82. }
  83. //尾页
  84. function GoToEndPage() {
  85. pageIndex = parseInt($("#count").text()) - ;
  86. AjaxGetData($("#txtSearch").val(), pageIndex, pageSize);
  87. }
  88. //跳转
  89. function GoToAppointPage(e) {
  90. var page = $(e).prev().val();
  91. if (isNaN(page)) {
  92. alert("请输入数字!");
  93. }
  94. else {
  95. var tempPageIndex = pageIndex;
  96. pageIndex = parseInt($(e).prev().val())-;
  97. if (pageIndex < || pageIndex >= parseInt($("#count").text())) {
  98. pageIndex = tempPageIndex;
  99. alert("请输入有效的页面范围!");
  100. }
  101. else {
  102. AjaxGetData($("#txtSearch").val(), pageIndex, pageSize);
  103. }
  104. }
  105. }
  106. </script>

数据的传输用的JSON格式。大家知道JSON是轻量级别的数据传输。前台的展现时用的table。这样生成的HTML代码很简洁。

HTML如下:

  1. <div>
  2. <input type="text" id="txtSearch" />
  3. <input type="button" id="btnSearch" value="Search" />
  4. </div>
  5. <div id="divSearchResult">
  6.  
  7. </div>
  8. jQueryPaging.aspx页面的CS代码如下:
  9. public partial class jQueryPaging : System.Web.UI.Page
  10. {
  11. protected void Page_Load(object sender, EventArgs e)
  12. {
  13. Int32 pageIndex=Int32.MinValue;
  14. Int32 pageSize=Int32.MinValue;
  15. String name=String.Empty;
  16. JavaScriptSerializer jss=new JavaScriptSerializer();
  17. if(Request["Name"]!=null)
  18. {
  19. name=Request["Name"].ToString();
  20. if (Request["PageIndex"] != null)
  21. {
  22. pageIndex = Int32.Parse(Request["PageIndex"].ToString());
  23. pageSize = Request["PageSize"] != null ? Int32.Parse(Request["PageSize"].ToString()) : ;
  24. IList<Customer> customersLists = new List<Customer>();
  25. Customer c = null;
  26. DataSet ds= LookDataFromDB(name,pageIndex,pageSize);
  27. foreach (DataRow row in ds.Tables[].Rows)
  28. {
  29. c = new Customer();
  30. c.CustomerID = row["CustomerID"].ToString();
  31. c.CompanyName = row["CompanyName"].ToString();
  32. c.ContactName = row["ContactName"].ToString();
  33. c.ContactTitle = row["ContactTitle"].ToString();
  34. c.Address = row["Address"].ToString();
  35. c.City = row["City"].ToString();
  36. customersLists.Add(c);
  37. }
  38.  
  39. if (customersLists.Count>)
  40. {
  41. Response.Write("{\"Count\":"+ds.Tables[].Rows[][]+",\"Customers\":"+jss.Serialize(customersLists)+"}");
  42. Response.End();
  43. }
  44. }
  45. }
  46. }
  47.  
  48. private DataSet LookDataFromDB(string name, int pageIndex, int pageSize)
  49. {
  50. SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
  51. conn.Open();
  52. SqlCommand cmd = new SqlCommand();
  53. cmd.Connection = conn;
  54. cmd.CommandType = CommandType.StoredProcedure;
  55. cmd.CommandText = "SearchCustomerByName";
  56. cmd.Parameters.Add(new SqlParameter("@name",name));
  57. cmd.Parameters.Add(new SqlParameter("@pageIndex",pageIndex));
  58. cmd.Parameters.Add(new SqlParameter("@pageSize", pageSize));
  59. SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
  60. DataSet ds = new DataSet();
  61. try
  62. {
  63. dataAdapter.Fill(ds);
  64. }
  65. catch (Exception)
  66. {
  67.  
  68. }
  69. finally
  70. {
  71. if (dataAdapter != null)
  72. {
  73. dataAdapter.Dispose();
  74. }
  75. if (cmd != null)
  76. {
  77. cmd.Dispose();
  78. }
  79. if (conn != null)
  80. {
  81. conn.Dispose();
  82. }
  83. }
  84. return ds;
  85. }
  86. }
  87. 还有我们在CS中定义的Model类:
  88. public class Customer
  89. {
  90. public String CustomerID { get; set; }
  91. public String CompanyName { get; set; }
  92. public String ContactName { get;set;}
  93. public String ContactTitle { get; set; }
  94. public String Address { get; set; }
  95. public String City { get; set; }
  96. }
  97. SearchCustomerByName 存储过程的代码如下:
  98. SET ANSI_NULLS ON
  99. GO
  100. SET QUOTED_IDENTIFIER ON
  101. GO
  102. Create PROCEDURE SearchCustomerByName
  103. @name nvarchar(),
  104. @pageIndex int,
  105. @pageSize int
  106. AS
  107. BEGIN
  108. SET NOCOUNT ON;
  109. select t.CustomerID,t.CompanyName,t.ContactName,t.ContactTitle,t.Address,t.City from
  110. (
  111. select Row_Number() over (order by CustomerID) AS RowNum,* from Customers where ContactName like '%'+@name+'%'
  112. ) t
  113. where t.RowNum between @pageIndex*+ and (@pageIndex+)*
  114.  
  115. select count(*) from Customers
  116. where ContactName like '%'+@name+'%'
  117.  
  118. END
  119. GO
具体的效果,大家可以把上述的代码响应的复制到VS中和数据库中,进行演示。 

这个版本其实很多的功能点都是没有考虑到的,仅仅是个示例,大家可以在自己的实际项目中修改以上的功能来满足自己的需求。

AJAXA进行分页(2)的更多相关文章

  1. 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题

    最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...

  2. js实现前端分页页码管理

    用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...

  3. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  4. MVC如何使用开源分页插件shenniu.pager.js

    最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...

  5. NET Core-TagHelper实现分页标签

    这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...

  6. 套用JQuery EasyUI列表显示数据、分页、查询

    声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...

  7. php实现的分页类

    php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...

  8. C#关于分页显示

    ---<PS:本人菜鸟,大手子还请高台贵手> 以下是我今天在做分页时所遇到的一个分页显示问题,使用拼写SQL的方式写的,同类型可参考哦~ ------------------------- ...

  9. JAVA 分页工具类及其使用

    Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...

随机推荐

  1. 解决运行Robot Framework报‘’ascii’错误

    在Python27\Lib\site-packages中新建‘sitecustomize.py’,内容如下: #coding=utf8import sysreload(sys)sys.setdefau ...

  2. CDN-内容发布网络

    整理<CDN技术详解>一书中重要的内容. 互联网与万维网 广义的互联网,由两层组成:一层是以TCP/IP为代表的网络层:另一层是以万维网WWW为代表的应用层.辨识互联网和万维网的区别,是认 ...

  3. Javascript专题(三)c.各种轮播--上下滚动轮播(面向对象版本)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. [Leetcode]011. Container With Most Water

    public class Solution { public int maxArea(int[] height) { int left = 0, right = height.length - 1; ...

  5. Eclipse中mybatis的xml文件没有提示,出现the file cannot be validated as the XML definition.....

    1.下载dtd文件 2.在eclipse中配置本地dtd文件: Window->Preferences->XML->XML Catalog->User Specified En ...

  6. C++之struct

    C++的struct对C做和很多补充,里面可以放函数(构造函数和虚函数),也可以同struct和class的继承,在C++中也完全可以替代class.他们之间的主要区别: 1 calss默认是私有继承 ...

  7. Oozie安装的说明

    不多说,直接干货! Oozie相当于Hadoop的一个客户端,因此集群中要有一台机器部署Oozie server端即可,由于可以有任意多个客户端连接Oozie,故每个客户端都必须部署Oozie cli ...

  8. Access 将SQL查询结果强制转换为某种类型

    每个函数都可以强制将一个表达式转换成某种特定数据类型. 语法 CBool(expression) CByte(expression) CCur(expression) CDate(expression ...

  9. Elasticsearch支持的字段类型

    es支持下列简单的字段类型: String: string Whole number: byte, short, integer, long Floating point: float, double ...

  10. linq 读取xml

    xml 文件如下: <?xml version="1.0" encoding="utf-8" ?><nodes> <node> ...