关于Ajax无刷新分页技术的一些研究 c#

时间:2022-09-23 16:09:07

关于Ajax无刷新分页技术的一些研究 c#

小弟新手,求大神有更好的解决方案,指教下~

以前做项目,用过GridView的刷新分页,也用过EasyUI的封装好的分页技术,最近在老项目的基础上加新功能,迫于需求,自己没事琢磨了个Ajax无刷新分页技术,

也在百度看了下, 写的都不是很系统,在这里写个系统的,简单的,方便大家研究下。

系统支持 和数据库交互的无刷新分页、删除后的 当前页 定位、在查询条件下的 分页 ,有数据,显示删除,列表,没有只显示新增按钮。

项目采取的后台拼html,图了个简单,方便区分分页js,在后台写html,增加服务器压力,第一选择还是传JSON哈,谢谢楼下大神回答。

我写的这个无刷新分页用的最重要的sql 语句就是

sql = @"select * from  (select  ROW_NUMBER() over (ORDER BY CREATEDATE) rownum,a.goodsid,a.goodsname,a.itemname,a.price FROM GoodsOrderAccept a " + selectsql + ") t where t.rownum>='" + ((page - 1) * 10 + 1) + "' and t.rownum<='" + page * 10 + "'";

相信有些大神,看到这里,已经知道我采取的什么方法了,重点就是 ROW_NUMBER(),利用它和Page变量,从前台页面请求不同的页码,显示不同的数据。

下面看一下项目的目录结构:

关于Ajax无刷新分页技术的一些研究 c#

List.aspx就是页面,Page.ashx就是实现的分页技术,JSONObject.cs在后台对JSON序列化成对象。

List.aspx页面执行如下:

关于Ajax无刷新分页技术的一些研究 c#

如页面所示,支持checkbox,单删除,多删除.

下面开始贴代码:

List.aspx页面代码如下:

关于Ajax无刷新分页技术的一些研究 c#
  1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="List.aspx.cs" Inherits="AjaxPage.List" %>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head runat="server">
6 <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
7 <title>分页功能演示</title>
8 <script type="text/javascript">
9 $(function () {
10
11 //初始化首页数据以及各种变量
12 $.ajax({
13 type: "POST",
14 url: "Page.ashx",
15 dataType: "json",
16 data: {
17 action: "getFirstPageAndVariable"
18 },
19 success: function (data) {
20 if (data.outStr != "" && data.pagecount != "0") {
21 //有数据加载数据列表,显示数据列表,显示删除按钮,以及分页按钮
22 document.getElementById('btn_delete').style.display = "";
23 document.getElementById('div_list').style.display = "";
24 document.getElementById('div_page').style.display = "";
25 $("#tbody_list").empty();
26 $("#tbody_list").append(data.outStr);
27 //把总页数赋值给变量
28 $('#<%=hid_last.ClientID %>').val(data.pagecount);
29 //初始化页数输入框
30 $("#text_page").val($('#<%=hid_shou.ClientID %>').val());
31 //将上一页和下一页变量赋值为首页变量
32 $('#<%=hid_change.ClientID %>').val($('#<%=hid_shou.ClientID %>').val());
33 }
34 }
35 });
36 //绑定按钮事件
37 $("#btn_search").bind("click", btn_search);
38 $("#btn_delete").bind("click", btn_delete);
39 //查询事件
40 function btn_search(event) {
41
42 //查询输入框不为空的话,才执行查询事件
43 //if ($("#text_search").val().toString().replace(/[ ]/g, "") != "") {
44 $.ajax({
45 type: "POST",
46 url: "Page.ashx",
47 dataType: "json",
48 data: {
49 action: "getFirstPageAndVariable",
50 search: $("#text_search").val()
51 },
52 success: function (data) {
53 if (data.outStr != "" && data.pagecount != "0") {
54 //有数据加载数据列表,显示数据列表,显示删除按钮,以及分页按钮
55 document.getElementById('btn_delete').style.display = "";
56 document.getElementById('div_list').style.display = "";
57 document.getElementById('div_page').style.display = "";
58 $("#tbody_list").empty();
59 $("#tbody_list").append(data.outStr);
60 //把总页数赋值给变量
61 $('#<%=hid_last.ClientID %>').val(data.pagecount);
62 //初始化页数输入框
63 $("#text_page").val($('#<%=hid_shou.ClientID %>').val());
64 //模糊查询后,将上一页和下一页变量赋值为首页变量
65 $('#<%=hid_change.ClientID %>').val($('#<%=hid_shou.ClientID %>').val());
66 }
67 }
68 });
69 //}
70 }
71 //删除事件
72 function btn_delete(event) {
73 var deleteData = "";
74 $("#tbody_list tr").each(function () {
75 if ($($(this).children().get(0)).find("input")[0].status) {
76 deleteData += $($(this).children().get(0)).find("input")[0].value + "," + $($(this).children().get(0)).find("input")[0].value + "|";
77 }
78 });
79 if (deleteData == "") {
80 alert("不能提交空数据!");
81 return false;
82 }
83 if (!confirm("确定要删除吗?")) {
84 return false;
85 }
86 $.ajax({
87 type: "POST",
88 url: "Page.ashx",
89 dataType: "json",
90 data: {
91 action: "deleteData",
92 deleteData: deleteData
93 },
94 success: function (data) {
95 if (data.status == "success") {
96 //初始化当前页数据以及各种变量
97 $.ajax({
98 type: "POST",
99 url: "Page.ashx",
100 dataType: "json",
101 data: {
102 action: "getDeletePageAndVariable",
103 hid_change: $('#<%=hid_change.ClientID %>').val(),
104 search: $("#text_search").val()
105 },
106 success: function (data) {
107 if (data.pagecount != "0") {
108 $("#tbody_list").empty();
109 $("#tbody_list").append(data.outStr);
110 //把总页数赋值给变量
111 $('#<%=hid_last.ClientID %>').val(data.pagecount);
112 //初始化页数输入框
113 $("#text_page").val(data.hid_change);
114 //将上一页和下一页变量赋值为首页变量
115 $('#<%=hid_change.ClientID %>').val(data.hid_change);
116 }
117 }
118 });
119 }
120 }
121 });
122 }
123 //加载首页点击事件
124 $("#a_shou").click(function () {
125 $.ajax({
126 type: "POST",
127 url: "Page.ashx",
128 dataType: "json",
129 data: {
130 action: "clickPageAndGetData",
131 page: $('#<%=hid_shou.ClientID %>').val(),
132 search: $("#text_search").val()
133 },
134 success: function (data) {
135 if (data.outStr != "") {
136 $("#tbody_list").empty();
137 $("#tbody_list").append(data.outStr);
138 $("#text_page").val($('#<%=hid_shou.ClientID %>').val());
139 //将上一页和下一页的变量赋值为首页变量
140 $('#<%=hid_change.ClientID %>').val($('#<%=hid_shou.ClientID %>').val());
141 }
142 }
143 });
144 });
145 //加载末页点击事件
146 $("#a_last").click(function () {
147 $.ajax({
148 type: "POST",
149 url: "Page.ashx",
150 dataType: "json",
151 data: {
152 action: "clickPageAndGetData",
153 page: $('#<%=hid_last.ClientID %>').val(),
154 search: $("#text_search").val()
155 },
156 success: function (data) {
157 if (data.outStr != "") {
158 $("#tbody_list").empty();
159 $("#tbody_list").append(data.outStr);
160 $("#text_page").val($('#<%=hid_last.ClientID %>').val());
161 //将上一页和下一页的变量赋值为首页变量
162 $('#<%=hid_change.ClientID %>').val($('#<%=hid_last.ClientID %>').val());
163 }
164 }
165 });
166 });
167 //加载上一页点击事件
168 $("#a_back").click(function () {
169 //当前页面为首页时,无上一页事件
170 var back = parseInt($('#<%=hid_change.ClientID %>').val()) - 1;
171 if (back != 0) {
172 $.ajax({
173 type: "POST",
174 url: "Page.ashx",
175 dataType: "json",
176 data: {
177 action: "clickPageAndGetData",
178 page: back,
179 search: $("#text_search").val()
180 },
181 success: function (data) {
182 if (data.outStr != "") {
183 $("#tbody_list").empty();
184 $("#tbody_list").append(data.outStr);
185 $('#<%=hid_change.ClientID %>').val(back);
186 $("#text_page").val(back);
187 }
188 }
189 });
190 }
191 });
192 //加载下一页点击事件
193 $("#a_next").click(function () {
194 //当前页面为最后一页时,无下一页事件
195 var next = parseInt($('#<%=hid_change.ClientID %>').val()) + 1;
196 if ($('#<%=hid_change.ClientID %>').val() != $('#<%=hid_last.ClientID %>').val()) {
197 $.ajax({
198 type: "POST",
199 url: "Page.ashx",
200 dataType: "json",
201 data: {
202 action: "clickPageAndGetData",
203 page: next,
204 search: $("#text_search").val()
205 },
206 success: function (data) {
207 if (data.outStr != "") {
208 $("#tbody_list").empty();
209 $("#tbody_list").append(data.outStr);
210 $('#<%=hid_change.ClientID %>').val(next);
211 $("#text_page").val(next);
212 }
213 }
214 });
215 }
216 });
217 //加载确定点击事件
218 $("#a_ok").click(function () {
219 $.ajax({
220 type: "POST",
221 url: "Page.ashx",
222 dataType: "json",
223 data: {
224 action: "clickPageAndGetData",
225 page: $("#text_page").val(),
226 search: $("#text_search").val()
227 },
228 success: function (data) {
229 if (data.outStr != "") {
230 $("#tbody_list").empty();
231 $("#tbody_list").append(data.outStr);
232 $('#<%=hid_change.ClientID %>').val($("#text_page").val());
233 }
234 }
235 });
236 });
237 });
238 var record = {
239 num: ""
240 }
241 var checkDecimal = function (n) {
242 var decimalReg = /^[0-9]*[1-9][0-9]*$/;
243 if (n.value != "" && decimalReg.test(n.value)) {
244 record.num = n.value;
245 } else {
246 if (n.value != "") {
247 n.value = record.num;
248 }
249 }
250 }
251 </script>
252 </head>
253 <body>
254 <form id="form_page" runat="server">
255 <!--页面顶部-->
256 <div id="div_tool">
257 <table width="100%" id="table_tool">
258 <tr>
259 <td width="50%" style="text-align: center">
260 请输入食材名称:
261 <input type="text" id="text_search" />
262 </td>
263 <td width="25%">
264 <input type="button" value="查询" id="btn_search" />
265 </td>
266 <td width="25%">
267 <input type="button" value="删除" style="display: none" id="btn_delete" />
268 </td>
269 </tr>
270 </table>
271 </div>
272 <br />
273 <!--页面主题部分-->
274 <div id="div_list" style="display: none">
275 <table width="100%" id="table_list">
276 <thead>
277 <tr>
278 <th width="25%">
279 选择
280 </th>
281 <th width="25%">
282 食材名称
283 </th>
284 <th width="25%">
285 食材单位
286 </th>
287 <th width="25%">
288 食材单价
289 </th>
290 </tr>
291 </thead>
292 <tbody id="tbody_list">
293 </tbody>
294 </table>
295 </div>
296 <!--始终保持在页面底部-->
297 <div id="div_page" style="position: absolute; bottom: 0; display: none">
298 <table width="100%">
299 <tr>
300 <td style="text-align: center; width: 100%">
301 <a href="#" id="a_shou">首页</a> <a href="#" id="a_back">上一页</a>
302 <input type="text" id="text_page" style="width: 50px;" onkeyup="checkDecimal(this)" />
303 <a href="#" id="a_next">下一页</a> <a href="#" id="a_last">末页</a> <a href="#" id="a_ok">
304 确定</a>
305 </td>
306 </tr>
307 </table>
308 </div>
309 <!--记录点击首页的变量,始终为1-->
310 <asp:HiddenField ID="hid_shou" runat="server" Value="1" />
311 <!--记录点击上一页和下一页的变量-->
312 <asp:HiddenField ID="hid_change" runat="server" />
313 <!--记录点击末页的变量-->
314 <asp:HiddenField ID="hid_last" runat="server" />
315 </form>
316 </body>
317 </html>
关于Ajax无刷新分页技术的一些研究 c#

开始插入 Page.ashx代码:

关于Ajax无刷新分页技术的一些研究 c#
  1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.Data.SqlClient;
6 using System.Data;
7
8 namespace AjaxPage
9 {
10 /// <summary>
11 /// Page 的摘要说明,10条数据分页
12 /// </summary>
13 public class Page : IHttpHandler
14 {
15
16 public void ProcessRequest(HttpContext context)
17 {
18 context.Response.ContentType = "text/plain";
19
20 JSONObject jo = new JSONObject();
21 //取得页面发出的动作
22 string action = context.Request["action"];
23 //取得页面的查询条件
24 string search = context.Request["search"];
25 SqlDataAdapter ad = null;
26 DataSet dsPagecount = new DataSet();
27 DataSet dsOutstr = new DataSet();
28 DataTable dt = new DataTable();
29 string sql = "";
30 string connectstring = "server=localhost;User ID=sa;Password=1;database=SqcpDB;Connection Reset=FALSE";
31 String outStr = String.Empty;
32 string selectsql = "";
33 //页面有查询条件
34 if (search != "")
35 {
36 selectsql = " where goodsname like '%" + search + "%' ";
37 }
38 //初始化页面以及首页内容
39 if (action == "getFirstPageAndVariable")
40 {
41 sql = @"select count(goodsid) from GoodsOrderAccept" + selectsql;
42 ad = new SqlDataAdapter(sql, connectstring);
43 ad.Fill(dsPagecount);
44 dt = dsPagecount.Tables[0];
45 //取得数据总条数
46 int count = Convert.ToInt32(dt.Rows[0][0]);
47 //每页10条记录,取得总页数逻辑
48 int pagecount = count / 10;
49 if (count % 10 != 0)
50 {
51 pagecount++;
52 }
53 jo.Add("pagecount", pagecount.ToString());
54 sql = @"select * from (select ROW_NUMBER() over (ORDER BY CREATEDATE) rownum,a.goodsid,a.goodsname,a.itemname,a.price FROM GoodsOrderAccept a " + selectsql + ") t where t.rownum>=0 and t.rownum<=10";
55 ad = new SqlDataAdapter(sql, connectstring);
56 ad.Fill(dsOutstr);
57 dt = dsOutstr.Tables[0];//初始加载首页10条数据
58 if (null != dt && dt.Rows.Count != 0)
59 {
60 foreach (DataRow dr in dt.Rows)//遍历dt以html的格式输出内容
61 {
62 outStr += "<tr>";
63 //给checkbox设置value属性,方便删除
64 outStr += String.Format("<td style='text-align:center'><input type='checkbox' value='{0}' /></td>", dr["goodsid"]);
65 outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["goodsname"]);
66 outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["itemname"]);
67 outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["price"]);
68 outStr += "</tr>";
69 }
70 }
71 jo.Add("outStr", outStr);
72 context.Response.Write(JSONConvert.SerializeObject(jo));
73 }
74 //点击分页按钮时,执行的动作
75 else if (action == "clickPageAndGetData")
76 {
77 string pagestr = context.Request["page"];
78 int page = Convert.ToInt32(pagestr);
79 sql = @"select * from (select ROW_NUMBER() over (ORDER BY CREATEDATE) rownum,a.goodsid,a.goodsname,a.itemname,a.price FROM GoodsOrderAccept a " + selectsql + ") t where t.rownum>='" + ((page - 1) * 10 + 1) + "' and t.rownum<='" + page * 10 + "'";
80 ad = new SqlDataAdapter(sql, connectstring);
81 ad.Fill(dsOutstr);
82 dt = dsOutstr.Tables[0];
83 if (null != dt && dt.Rows.Count != 0)
84 {
85 foreach (DataRow dr in dt.Rows)//遍历dt以html的格式输出内容
86 {
87 outStr += "<tr>";
88 //给checkbox设置value属性,方便删除
89 outStr += String.Format("<td style='text-align:center'><input type='checkbox' value='{0}' /></td>", dr["goodsid"]);
90 outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["goodsname"]);
91 outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["itemname"]);
92 outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["price"]);
93 outStr += "</tr>";
94 }
95 }
96 jo.Add("outStr", outStr);
97 context.Response.Write(JSONConvert.SerializeObject(jo));
98 }
99 //点击删除按钮时,执行的动作
100 else if (action == "deleteData")
101 {
102 String[] postDatas = context.Request["deleteData"].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
103 SqlConnection conn = new SqlConnection(connectstring);
104 conn.Open();
105 foreach (String pd in postDatas)
106 {
107 String[] pdArr = pd.Split(",".ToCharArray());
108 sql = @"delete from GoodsOrderAccept where goodsid='" + pdArr[0] + "'";
109 SqlCommand cmd = new SqlCommand(sql, conn);
110 cmd.ExecuteNonQuery();
111 }
112 conn.Close();
113 jo.Add("status", "success");
114 context.Response.Write(JSONConvert.SerializeObject(jo));
115 }
116 //删除成功后,固定到当前页
117 else if (action == "getDeletePageAndVariable")
118 {
119 string hid_changestr = context.Request["hid_change"];
120 int hid_change = Convert.ToInt32(hid_changestr);
121 sql = @"select count(goodsid) from GoodsOrderAccept" + selectsql;
122 ad = new SqlDataAdapter(sql, connectstring);
123 ad.Fill(dsPagecount);
124 dt = dsPagecount.Tables[0];
125 int count = Convert.ToInt32(dt.Rows[0][0]);
126 int pagecount = count / 10;
127 if (count % 10 != 0)
128 {
129 pagecount++;
130 }
131 jo.Add("pagecount", pagecount.ToString());//每页10条记录,取得总页数
132 if (hid_change > pagecount)
133 {
134 hid_change = pagecount;
135 }
136 jo.Add("hid_change", hid_change.ToString());
137 sql = @"select * from (select ROW_NUMBER() over (ORDER BY CREATEDATE) rownum,a.goodsid,a.goodsname,a.itemname,a.price FROM GoodsOrderAccept a " + selectsql + ") t where t.rownum>='" + ((hid_change - 1) * 10 + 1) + "' and t.rownum<='" + hid_change * 10 + "'";
138 ad = new SqlDataAdapter(sql, connectstring);
139 ad.Fill(dsOutstr);
140 dt = dsOutstr.Tables[0];
141 if (null != dt && dt.Rows.Count != 0)
142 {
143 foreach (DataRow dr in dt.Rows)//遍历dt以html的格式输出内容
144 {
145 outStr += "<tr>";
146 //给checkbox设置value属性,方便删除
147 outStr += String.Format("<td style='text-align:center'><input type='checkbox' value='{0}' /></td>", dr["goodsid"]);
148 outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["goodsname"]);
149 outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["itemname"]);
150 outStr += String.Format("<td style='text-align:center'>{0}</td>", dr["price"]);
151 outStr += "</tr>";
152 }
153 }
154 jo.Add("outStr", outStr);
155 context.Response.Write(JSONConvert.SerializeObject(jo));
156 }
157 }
158
159 public bool IsReusable
160 {
161 get
162 {
163 return false;
164 }
165 }
166 }
167 }
关于Ajax无刷新分页技术的一些研究 c#

关于Ajax无刷新分页技术的一些研究 c#的更多相关文章

  1. 学习笔记之AJAX无刷新分页

    利用AJAX实现无刷新分页技术原理: 其主要是利用AJAX的异步处理机制,实现数据的异步传递,它隐藏了客户端向服务端请求数据的状态,在客户端表现为无刷新的显示状态. 实现分页的步骤: 1.客服端点击页 ...

  2. ajax 无刷新分页

    //ajax 无刷新分页1.前台要做的 滑动时 当前page+1,通过page ajax请求后台接口获取数据将数据进行拼装;2.后台要做的 做分页接口返回json数据前台判断触发请求条件: var p ...

  3. thinkphp ajax 无刷新分页效果的实现

    思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...

  4. thinkphp下实现ajax无刷新分页

    1.前言 作为一名php程序员,我们开发网站主要就是为了客户从客户端进行体验,在这里,thinkphp框架自带的分页类是每次翻页都要刷新一下整个页面,这种翻页的用户体验显然是不太理想的,我们希望每次翻 ...

  5. ThinkPhp 3&period;2 ajax无刷新分页(未完全改完,临时凑合着用)

    临时更改后的page类(很多地方没修改...因为笔者PHP没学好..)如下: <?phpnamespace Fenye\libs; /**  file: page.class.php   完美分 ...

  6. Ajax无刷新分页

    前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxPage ...

  7. jquery&plus;jquery&period;pagination&plus;php&plus;ajax 无刷新分页

    <!DOCTYPE html> <html ><head><meta http-equiv="Content-Type" content= ...

  8. SUI分页组件和avalon搞定ajax无刷新分页

    <div ms-controller="main"> <h2 class="pagination-centered">{{ title ...

  9. php&plus;ajax无刷新分页原生ajax实现分页最简单完整实例-完整代码,

    展示页面:index.html <html><script> function ajax_show() { // 获取当前页 var page =1; var xhr = ne ...

随机推荐

  1. getopt

    头文件 #include<unistd.h> 定义函数 int getopt(int argc,char * const argv[ ],const char * optstring); ...

  2. 关于java的自动拆装箱若干细节问题

    一.首先需要了解的几个前提: 1.自动装箱过程是通过调用valueOf方法实现的(如Integer.valueOf(10)),而拆箱过程是通过调用包装器的 xxxValue方法实现的(如Integer ...

  3. HTML学习(二)

    表格和列表 <!-- /* @dl→definition list(定义列表),ul→unordered list(无序列表),ol→ordered list * @一个完整的表格.table. ...

  4. C&plus;&plus;学习-3

    引用与函数指针: 函数指针就是把函数名挖掉变成*p 函数指针的类型就是把p去掉 函数指针的引用(引用就是在类型和名字的中间加&) 函数指针加一个()就成调用函数了-----------p() ...

  5. 服务定位器(Service Locator)

    服务定位器(Service Locator) 跟DI容器类似,引入Service Locator目的也在于解耦.有许多成熟的设计模式也可用于解耦,但在Web应用上, Service Locator绝对 ...

  6. 数据库和Django model 生成和反向生成

    Django 脚本生成数据表 建立映射关系 如果询问时区时间,选1 然后输入timezone.now() python manage.py makemigrations (如果有子应用的话子应用名称填 ...

  7. GridView中CheckBox翻页记住选项

    <asp:GridView ID="gvYwAssign" runat="server" AutoGenerateColumns="False& ...

  8. ES6标准入门之变量的解构赋值简单解说

    首先我们来看一看解构的概念,在ES6标准下,允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称作解构,简而言之粗糙的理解就是变相赋值. 解构赋值的规则是,只要等号右边的值不是对象或者数组 ...

  9. Mysql锁机制简单了解一下

    历史文章推荐: 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 Java NIO 概览 关于分布式计算的一些概念 一 锁分类(按照锁的粒度分类) Mysq ...

  10. &lpar;转&rpar;在SDL工程中让SDL&lowbar;ttf渲染汉字

    有时候在关于SDL的博文中看到一些评论,说SDL对中文的支持不佳,因为当程序涉及中文时总是输出乱码. 照我个人观点,这里面很多都是误解.下面就根据我在windows下使用SDL的情况,说说我的观点. ...