【IT168技术文档】
ajax library的客户端基本库里提供了异步访问服务端页面的脚本方法,很好的封装了xmlHttpRequest的常用方法,并与aspnet的方法实现了无缝的集成,很方便的在客户端异步的调用服务器的方法。利用这些脚本方法,仅仅从服务器端返回纯粹的数据,最终的如何显示这些数据由客户端完成。不像 ajax.net里的那些服务器控件,比如updatepanel包装下的控件。虽然是无刷新了,但是最终控件的生成还是由服务器端完成,然后成堆的返回到客户端,服务器的负担还是没减少。
分页是我们常用的显示数据的操作,按照原来aspnet的服务器控件模式,datagrid包办了获取数据和分页的操作,而用客户端脚本,只需要服务器提供数据即可,下面用客户端脚本完成在客户端的分页功能。这种分页的基本步骤是,客户端首先从服务器那获取总记录数,然后计算分页信息,翻页的时候将页码和页面大小发送到服务器,服务器返回符合要求的记录。
1/**//// <summary> 2 /// 总记录数 3 /// </summary> 4 private static int recordCount = 0; 5 6 /**//// <summary> 7 /// 获取分页数据,其中book为自定义的类 8 /// 实际应该传入查询参数,这里只是简单模拟 9 /// </summary> 10 /// <param name="pageSize">页面大小</param> 11 /// <param name="pageIndex">当前页</param> 12 /// <returns></returns> 13 [GenerateScriptType(typeof(Book))] 14 [WebMethod] 15 public static IList<Book> GetBookList(int pageSize, int pageIndex) 16 { 17 // 模拟从数据库返回结果 18 int starRow = pageSize * pageIndex + 1; 19 int endRow = pageSize * (pageIndex + 1); 20 21 if (starRow > recordCount) 22 { 23 starRow = starRow - pageSize; 24 } 25 26 if (endRow > recordCount) 27 { 28 endRow = recordCount; 29 } 30 31 IList<Book> books = new List<Book>(); 32 33 for (int i = starRow; i <= endRow; i++) 34 { 35 Book book = new Book("book" + i, "isbn" + i); 36 books.Add(book); 37 } 38 39 return books; 40 } 41 42 /**//// <summary> 43 /// 实际情况应该是从数据库获取总记录数,并且需要有传入参数 44 /// 这里只随机返回一个数字 45 /// </summary> 46 /// <returns></returns> 47 [WebMethod] 48 public static int GetListCount() 49 { 50 recordCount = new Random(DateTime.Now.Millisecond).Next(1, 10000); 51 return recordCount; 52 }