今天看到一个.java哥们写过的在页面直接请求数据列表的程序代码。它是实现选中客户联系人后,无刷新的弹出div罗列其它联系人列表的功能。忽然想到既然可以请求联系人列表,而且无刷新。那么取复杂的数据列表呢,后来想到了数据分页。我现在用了自己写的一个分页控件。但是效率有时候感觉不是很高,它是以 用户控件+存储过程+分页处理类 来实现分页的。但是无可避免的就碰到了刷新的问题即使分页很快,但是只要这“刷”的一下总是感觉很不爽。而且还要页面编译一遍,还要在服务端处理ViewState。以及其它的性能损失。既然 .ashx 可以 省略页面编译的过程。再把分页处理类 挪到客户端,那应该是会性能提升不少,还没有刷新,一定很爽,想到就做。
我定的思路是: .ashx程序中,编写好取得不同页码的程序。在页面布局好的前提下,留下数据区域 div。然后在页面请求 .ashx程序生成下一页的html代码。覆盖div.innerHTMl 。
首先是页面,因为是要实践思路,所以页面真是很简单。引用了jquery.js
复制代码 代码如下:
<div id="lab">
<input id="Button1" type="button" value="初始化数据" onclick="Init();" />
<div id="Content" style="width: 100%">
</div>
<div id="PagePanel" style="margin-left:20px"><label id="pageInfo"></label><a href="#" onclick="InitUp()">Last</a> <a href="#" onclick="InitNext()">Next</a></div>
<input type="hidden" value="0" id="currPageIndex" />
</div>
然后编写.js文件、实现客户端的分页控制。已经在显示页面储存了当前页码信息 一个<input type='hidden'>。
引用js文件后,就可以用了,哈哈,很顺利。
复制代码 代码如下:
// JScript 文件
function Init()
{
$.get("Handler.ashx", function (tablestr) {
document.getElementById('Content').innerHTML=tablestr;
document.getElementById('currPageIndex').value='1';
});
}
function InitNext()
{
var currIndex=document.getElementById('currPageIndex').value;
var nextIndex=Number(currIndex)+1;
$.get("NextHandler.ashx",{index:currIndex},function (tablestr) {
document.getElementById('Content').innerHTML=tablestr;
document.getElementById('pageInfo').innerText="当前第 "+nextIndex+" 页";
document.getElementById('currPageIndex').value=nextIndex;
});
}
function InitUp()
{
var currIndex=document.getElementById('currPageIndex').value;
var nextIndex=Number(currIndex)-1;
$.get("PreviousHandler.ashx",{index:currIndex},function (tablestr) {
document.getElementById('Content').innerHTML=tablestr;
document.getElementById('pageInfo').innerText="当前第 "+nextIndex+" 页";
document.getElementById('currPageIndex').value=nextIndex;
});
}
将它引用到显示页面
复制代码 代码如下:
<script type="text/javascript" src="http://www.cnblogs.com/Media/Script/jquery.js"></script>
<script src="JScript.js" type="text/javascript"></script>
搞定!
剩下的就是服务端了,这个就简单了,咱就是c#代码出身,直接呼啦呼啦.....
1、第一页初始化的数据。....
复制代码 代码如下:
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
using System.Data;
using System.Text;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
DataSet ds = HebHX.DBUtility.DbHelperSQL.Query("select top 20 cust_code,cust_name,cust_addr,bank_name,bank_account from customer_info");
StringBuilder tb = new StringBuilder("<table class='dateGrid'><tr><th style='width:130px'>税号</th><th style='width:150px'>企业名称</th><th style='width:200px'>企业地址</th><th style='width:150px'>银行</th><th style='width:150px'>银行账号</th><tr>");
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
tb.Append("<tr>");
for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
{
tb.Append("<td class='Item'>");
tb.Append(ds.Tables[0].Rows[i][j].ToString());
tb.Append("</td>");
}
tb.Append("</tr>");
}
tb.Append("</table>");
context.Response.Write(tb.ToString());
}
public bool IsReusable {
get {
return false;
}
}
}
2、点击下一页用到的 .ashx文件。
复制代码 代码如下:
<%@ WebHandler Language="C#" Class="NextHandler" %>
using System;
using System.Web;
using System.Data;
using System.Text;
public class NextHandler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
int pageRows = 20;
int pageIndex = Convert.ToInt32(context.Request.Params["index"]) + 1;
DataSet ds = HebHX.DBUtility.DbHelperSQL.Query("select top " + pageRows.ToString() + " cust_code,cust_name,cust_addr,bank_name,bank_account from customer_info where cust_id> (select max(t.cust_id) from (select top " + (pageRows * pageIndex).ToString() + " cust_id from customer_info order by cust_id) t) order by cust_id");
StringBuilder tb = new StringBuilder("<table class='dateGrid'><tr><th style='width:130px'>税号</th><th style='width:150px'>企业名称</th><th style='width:200px'>企业地址</th><th style='width:150px'>银行</th><th style='width:150px'>银行账号</th><tr>");
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
tb.Append("<tr>");
for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
{
tb.Append("<td class='Item'>");
tb.Append(ds.Tables[0].Rows[i][j].ToString());
tb.Append("</td>");
}
tb.Append("</tr>");
}
tb.Append("</table>");
context.Response.Write(tb.ToString());
}
public bool IsReusable {
get {
return false;
}
}
}
3、点击前一页用到的.ashx文件。有思路了这个就更简单了,直接就是copy了。
复制代码 代码如下:
<%@ WebHandler Language="C#" Class="UpHandler" %>
using System;
using System.Web;
using System.Data;
using System.Text;
public class UpHandler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
int pageRows = 20;
int pageIndex = Convert.ToInt32(context.Request.Params["index"]) - 1;
DataSet ds = HebHX.DBUtility.DbHelperSQL.Query("select top " + pageRows.ToString() + " cust_code,cust_name,cust_addr,bank_name,bank_account from customer_info where cust_id> (select max(t.cust_id) from (select top " + (pageRows * pageIndex).ToString() + " cust_id from customer_info order by cust_id) t) order by cust_id");
StringBuilder tb = new StringBuilder("<table class='dateGrid'><tr><th style='width:130px'>税号</th><th style='width:150px'>企业名称</th><th style='width:200px'>企业地址</th><th style='width:150px'>银行</th><th style='width:150px'>银行账号</th><tr>");
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
tb.Append("<tr>");
for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
{
tb.Append("<td class='Item'>");
tb.Append(ds.Tables[0].Rows[i][j].ToString());
tb.Append("</td>");
}
tb.Append("</tr>");
}
tb.Append("</table>");
context.Response.Write(tb.ToString());
}
public bool IsReusable {
get {
return false;
}
}
}
完成!直接测试..效果果然很不错,要知道我们的数据库的数据量大概在10万级别以上。..基本上感觉不到什么延时。还无刷新真是爽 啊,我要是用分页的存储过程,应该还是会有所提升的。
效果如图、、顺便画了一幅抽象画。哈哈...顺便也欣赏一下吧。
最后还是有点疑惑,.net的ajax 的用法是不是也是这样呢?..以前用ajax就是用一些服务端控件,没有真正实践过客户端的用法。但是我一直觉得ajax应该和现在我实现的方式大同小异。以后再学习吧..对ajax精通的哥们们可以指教一下,客户端的ajax的 经典、实用的知识。先谢谢了。
相关推荐:
SEO数量-如何提升你的网站排名与流量?,射阳seo优化五星服务
SEO百度优化:让你的品牌在搜索引擎中脱颖而出,日照网站推广策划
seo资源是什么意思,seo资源怎么打开 ,梅州ai自动插件加工
ChatGPT付款银行卡被拒绝?解决方案全解析!,小发猫ai智能写作查重能过吗
AI生成文章免费工具,让创作变得轻松又高效,ai安心健
什么是seo在线咨询,什么是seo在线咨询服务 ,unreal ai
亚马逊站内seo是什么优化,亚马逊seo关键词优化软件 ,ai画卡通章鱼
AI网站开发与代码创新:引领未来数字化变革的关键,ai ay规则
二次创作的魅力与潜力:创意无限的数字时代,天长外贸网站建设
怎么让AI写文章,轻松实现内容创作的智能化
SEO攻略:搜索引擎优化,快速提升网站排名,网站推广网站优化费用
什么是“神马关键词”?如何用它提升你的网络营销效果?,新闻发布网站怎么做推广
SEO资讯:最新趋势,提升网站排名,快速突破流量瓶颈,廊坊seo推广咨询服务
seo需要做些什么,做seo的 ,超级ai地图
SEO希望:如何通过SEO优化实现网站突破,迈向成功之路,品牌网站推广软件
seo简介主要写什么,seo主要内容 ,AI弧线这
AI缩短短文-提升创作效率,写作新体验,光速写作业ai写作app
seo规范是什么意思,seo包括哪些内容 ,AI智能破解
seo要学什么技术,seo要学什么技术好 ,ai.fale
“曝光量扩大,助力品牌腾飞的秘密武器”,盐山网站优化免费咨询
为什么要seo排名,为什么要做seo推广 ,AI写作开启创意新世界
【BVIP尊享体验:超越奢华,开启专属未来】,珠宝网站建设思路
丹东seo是什么怎么选,丹东spr ,黑发ai图
ChatGPT破解:人工智能未来的无限可能,污污AI解说
AI搜索写文章是什么意思?人工智能赋能内容创作的未来,高德地图 ai
ChatGPT怎么找梯子:突破网络限制,轻松访问AI助手的终极指南,鬼灭之刃人物AI还原
ChatGPT崩了?用户称打开是一片空白,真相竟然如此!,zzz*明星AI换脸
SEO任何:如何通过精准优化让网站流量突破极限,太原网站建设培训班
ChatGPT不能加载过去的对话,如何提升你的使用体验?,ai智能衣服
【SEO优化全攻略】提升网站流量的终极秘籍,带你轻松玩转搜索引擎优化!,金融网站推广维护
AI提供的阅读书目对学生的专业知识有多大帮助,沃奇ai
SEO提供:如何通过精准的SEO策略提升网站流量与品牌影响力,刷关键词排名立的火星
未来智能:AI智能人工软件引领数字化变革
乘风SEO:突破困境,领航网络营销新时代,武汉靠谱的关键词排名
GoogleGPT-引领未来智能对话的革命,灵境ai画质
AI免费写文章:让创作变得轻松高效
自动AI写文章:轻松创作时代的全新利器
亚马逊产品seo什么意思,亚马逊平台产品专业术语 ,小新同学ai
为什么“搜狗不收录”会成为企业SEO的新挑战?,烤肉店的线下营销与推广
优化公司:助力企业腾飞的秘密武器,微信营销推广价格多少
ChatGPT当前不可用?如何应对AI服务中断的挑战,ai文章免费写作app
怎么查一篇文章是不是AI写的?你需要这几个关键方法!
ChatGPT破解:人工智能的无限潜力与破解秘笈,意识变ai
为什么做酒店seo,为什么做酒店 ,ai uehara下载
为什么要年前做SEO,企业为什么做seo推广 ,云南ai大数据公司
AI免费生成:释放创造力的秘密武器
优化提长:让企业效能提升的秘密武器,长沙网站建设创意
SEO指:如何通过精准优化提高网站流量和转化率,无锡论坛营销推广要多久
什么是SEO优化方案,seo的优化方案 ,ai emorobot
SEO手段:提升网站流量的制胜法宝,idc网站怎么推广