(一). 运行效果如下:

(二). AjaxPro.NET简介

AjaxPro.NET是一个优秀的Ajax框架, 在实际应用中只要添加其DLL引用并进行简单的配置,

即可以非常方便的在客户端直接调用服务端方法, 实现验证目的.

(三).使用AjaxPro.NET预配置

1. 添加 AjaxPro.dll 文件的引用(示例代码中已经包含,直接COPY过来使用即可).

2. 在Web.config文件中添加以下配置,

1 <httpHandlers>2 <add verb="POST,GET"path="ajaxpro/*.ashx"type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>3 </httpHandlers>
3. 在要使用AjaxPro.NET框架的页面 *.aspx.cs 的 Page_Load事件中加如下代码:
AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
4. 经过以上三步骤后, 只要在后台服务端的方法前面增加属性[AjaxMethod]后:
1 [AjaxMethod()]//or [AjaxPro.AjaxMethod]2 publicArrayList GetSearchItems(stringstrQuery )3 {4 //生成数据源5 ArrayList items=newArrayList();6 items.Add("King");7 items.Add("Rose");8 returnitems ;9 }10 
就可以在客户端直接使用服务端方法, 非常方便, 客户端调用后台代码如下:
var returnValue=后台代码类名.GetSearchItems(参数);

(四). 详细代码如下:

1. 客户端脚本代码如下:

1 //// JScript File2 var DIV_BG_COLOR="#FFE0C0";3 var DIV_HIGHLIGHT_COLOR="#6699FF";4 var DIV_FONT="Arial";5 var DIV_PADDING="2px";6 var DIV_BORDER="1px solid #CCC";7 var queryField;8 var divName;9 var ifName;10 var lastVal="";11 var val="";12 var globalDiv;13 var divFormatted=false;14 15 function InitQueryCode( queryFieldName, hiddenDivName )16 {17 queryField=document.getElementById( queryFieldName );18 queryField.onblur=hideDiv;19 queryField.onkeydown=keypressHandler;20 queryField.autocomplete="off";21 22 if( hiddenDivName )23 {24 divName=hiddenDivName;25 }26 else27 {28 divName="querydiv";29 }30 31 ifName="queryiframe";32 setTimeout("mainLoop()",100);33 }34 35 function getDiv(divID)36 {37 if(!globalDiv)38 {39 if(!document.getElementById(divID))40 {41 var newNode=document.createElement("div");42 newNode.setAttribute("id", divID);43 document.body.appendChild(newNode);44 }45 globalDiv=document.getElementById(divID);46 var x=queryField.offsetLeft;47 var y=queryField.offsetTop+queryField.offsetHeight;48 var parent=queryField;49 while(parent.offsetParent)50 {51 parent=parent.offsetParent;52 x+=parent.offsetLeft;53 y+=parent.offsetTop;54 }55 if(!divFormatted)56 {57 globalDiv.style.backgroundColor=DIV_BG_COLOR;58 globalDiv.style.fontFamily=DIV_FONT;59 globalDiv.style.padding=DIV_PADDING;60 globalDiv.style.border=DIV_BORDER;61 globalDiv.style.width="100px";62 globalDiv.style.fontSize="90%";63 globalDiv.style.position="absolute";64 globalDiv.style.left=x+"px";65 globalDiv.style.top=y+"px";66 globalDiv.style.visibility="hidden";67 globalDiv.style.zIndex=10000;68 divFormatted=true;69 70 }71 }72 returnglobalDiv;73 }74 75 function showQueryDiv(resultArray)76 {77 var div=getDiv(divName);78 while( div.childNodes.length>0)79 {80 div.removeChild(div.childNodes[0]);81 }82 for(var i=0; i<resultArray.length; i++)83 {84 var result=document.createElement("div");85 result.style.cursor="pointer";86 result.style.padding="2px 0px 2px 0px";87 result.style.width=div.style.width;//Add width88 _unhighlightResult(result);89 result.onmousedown=selectResult;90 result.onmouseover=highlightResult;91 result.onmouseout=unhighlightResult;92 93 var value=document.createElement("span");94 value.className="value";95 value.style.textAlign="left";96 value.style.fontWeight="bold";97 value.innerHTML=resultArray[i];98 result.appendChild(value);99 div.appendChild(result);100 }101 showDiv(resultArray.length>0);102 }103 104 function selectResult()105 {106 _selectResult(this);107 }108 function _selectResult( item )109 {110 var spans=item.getElementsByTagName("span");111 if( spans )112 {113 for(var i=0; i<spans.length; i++)114 {115 if( spans[i].className=="value")116 {117 queryField.value=spans[i].innerHTML;118 lastVar=val=escape( queryField.value );119 mainLoop();120 queryField.focus();121 showDiv(false);122 return;123 }124 }125 }126 }127 128 function highlightResult()129 {130 _highlightResult(this);131 }132 133 function _highlightResult( item )134 {135 item.style.backgroundColor=DIV_HIGHLIGHT_COLOR;136 }137 138 function unhighlightResult()139 {140 _unhighlightResult(this);141 }142 143 function _unhighlightResult( item )144 {145 item.style.backgroundColor=DIV_BG_COLOR;146 }147 148 function showDiv( show )149 {150 var div=getDiv( divName );151 if( show )152 {153 div.style.visibility="visible";154 }155 else156 {157 div.style.visibility="hidden";158 }159 adjustiFrame();160 }161 162 function hideDiv()163 {164 showDiv(false);165 }166 167 function keypressHandler(evt)168 {169 var div=getDiv( divName );170 if( div.style.visibility=="hidden")171 {172 returntrue;173 }174 if(!evt&&window.event)175 {176 evt=window.event;177 }178 var key=evt.keyCode;179 180 var KEYUP=38;181 var KEYDOWN=40;182 var KEYENTER=13;183 var KEYTAB=9;184 if(( key!=KEYUP )&&( key!=KEYDOWN )&&( key!=KEYENTER )&&( key!=KEYTAB ))185 {186 returntrue;187 }188 var selNum=getSelectedSpanNum( div );189 var selSpan=setSelectedSpan( div, selNum );190 if( key==KEYENTER||key==KEYTAB )191 {192 if( selSpan )193 {194 _selectResult(selSpan);195 }196 evt.cancelBubble=true;197 returnfalse;198 }199 else200 {201 if( key==KEYUP)202 {203 selSpan=setSelectedSpan( div, selNum-1);204 }205 if( key==KEYDOWN )206 {207 selSpan=setSelectedSpan( div, selNum+1);208 }209 if( selSpan )210 {211 _highlightResult( selSpan );212 }213 }214 showDiv(true);215 returntrue;216 }217 218 function getSelectedSpanNum( div )219 {220 var count=-1;221 var spans=div.getElementsByTagName("div");222 if( spans )223 {224 for( var i=0; i<spans.length; i++)225 {226 count++;227 if( spans[i].style.backgroundColor!=div.style.backgroundColor )228 {229 returncount;230 }231 }232 }233 return-1;234 }235 function setSelectedSpan( div, spanNum )236 {237 var count=-1;238 var thisDiv;239 var divs=div.getElementsByTagName("div");240 if( divs )241 {242 for( var i=0; i<divs.length; i++)243 {244 if(++count==spanNum )245 {246 _highlightResult( divs[i] );247 thisDiv=divs[i];248 }249 else250 {251 _unhighlightResult( divs[i] );252 }253 }254 }255 returnthisDiv;256 }257 258 function adjustiFrame()259 {260 if(!document.getElementById(ifName))261 {262 var newNode=document.createElement("iFrame");263 newNode.setAttribute("id", ifName);264 newNode.setAttribute("src","javascript:false;");265 newNode.setAttribute("scrolling","no");266 newNode.setAttribute("frameborder","0");267 document.body.appendChild( newNode );268 }269 iFrameDiv=document.getElementById( ifName );270 var div=getDiv( divName );271 try272 {273 iFrameDiv.style.position="absolute";274 iFrameDiv.style.width=div.offsetWidth;275 iFrameDiv.style.height=div.offsetHeight;276 iFrameDiv.style.top=div.style.top;277 iFrameDiv.style.left=div.style.left;278 iFrameDiv.style.zIndex=div.style.zIndex-1;279 iFrameDiv.style.visibility=div.style.visibility;280 }281 catch(e)282 {}283 }

2. 页面文件 AutoQueryTextBox.aspx 代码如下:

1 <head runat="server">2 <title>AjaxPro.NET AutoQueryTextBox</title>3 <script language="javascript"src="lookup.js"></script>4 <script language="jscript">5 mainLoop=function()6 {7 val=escape( queryField.value );8 if( lastVal!=val )9 {10 var response=_Default.GetSearchItems( val );11 showQueryDiv( response.value );12 lastVal=val;13 }14 setTimeout('mainLoop()',100);15 returntrue;16 }17 </script>18 </head>19 <body>20 <form id="form1"runat="server">21 <div>22 <asp:Panel ID="Panel1"runat="server"BackColor="#C0C0FF"Font-Bold="True"Font-Overline="False"23 Font-Size="XX-Large"Height="37px"Width="475px">24 AjaxPro.NET AutoQueryTextBox</asp:Panel>25 <br/>26 <hr align="left"style="width: 473px"/>27 <br/>28 输入查询字串:&nbsp;&nbsp;<asp:TextBox ID="txSearch"runat="server"29 Width="134px"></asp:TextBox>&nbsp;<br/>30 <br/>31 </div>32 <script language="jscript">33 InitQueryCode(""+'<%= txSearch.ClientID %>'+"");34 </script>35 </form>36 </body>

3.后台文件 AutoQueryTextBox.aspx.cs 代码如下:

1 publicpartialclass_Default : System.Web.UI.Page2 {3 protectedvoidPage_Load(objectsender, EventArgs e)4 {5 Utility.RegisterTypeForAjax(typeof(_Default));6 }7 8 [AjaxMethod()]//or [AjaxPro.AjaxMethod]9 publicArrayList GetSearchItems(stringstrQuery )10 {11 //生成数据源12 ArrayList items=newArrayList();13 items.Add("King");14 items.Add("Rose");15 items.Add("James");16 items.Add("Elvis");17 items.Add("Jim");18 items.Add("John");19 items.Add("Adams");20 21 //筛选数据22 ArrayList selectItems=newArrayList();23 foreach(stringstrinitems )24 {25 if(str.ToUpper().IndexOf(strQuery.ToUpper())==0)26 {27 selectItems.Add(str);28 }29 }30 returnselectItems;31 }32 }

(五). 示例代码下载

http://files.cnblogs.com/ChengKing/AjaxPro.NET_AutoQueryTextBox.rar

转载于:https://www.cnblogs.com/MVP33650/archive/2007/04/27/730319.html

AjaxPro.NET实现TextBox智能获取服务端数据功能(Asp.net 2.0)(示例代码下载)相关推荐

  1. Ajax 实现在WebForm中拖动控件并即时在服务端保存状态数据 (Asp.net 2.0)(示例代码下载)...

    (一) . 运行示例效果 * 运行后用鼠标拖动蓝色的<马>到任意位置, 将浏览器关闭后, 再重新访问本页面, 会发现<马>仍然在您拖到的位置 (二). AjaxPro.NET简 ...

  2. [react] 怎样使用Hooks获取服务端数据?

    [react] 怎样使用Hooks获取服务端数据? import React, { useState, useEffect } from 'react'; import axios from 'axi ...

  3. 浏览器及时感知服务端数据变化的方式

    需求 在公司,有一个需求,是浏览器实时获取服务端数据变化,然后根据变化做相应的动作.需求场景如下:手机端扫描二维码,然后获取待取件订单列表,点击取件,进行取件,同时远端打印机打印出取件小票. 技术难点 ...

  4. 获取服务端https证书

    最近开发一个需求,涉及获取服务端https证书.一般进行https调用我们都不太关心底层细节,直接使用WebClient或者HttpWebRequest来发送请求,这两种方法都无法获取证书信息,需要用 ...

  5. AJAX学习笔记(基本使用,请求参数传递,获取服务端响应,错误处理,低版本IE浏览器缓存问题及解决)

    1. Ajax实现步骤 创建ajax对象 let xhr = new XMLHttpRequest(); 告诉ajax请求地址及请求方式 xhr.open('get','http://www.exam ...

  6. asp.net获取服务端和客户端信息

    为什么80%的码农都做不了架构师?>>>    asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName 获取用户信息:Page.User ...

  7. 魔方APP项目-01-移动端开发相关概念、移动端自适配、元信息(meta)、开发准备、移动端项目搭建(模拟器调试)、APICloud(APICloud 前端框架,获取服务端API接口)

    一.移动端开发相关概念 1.APP类型 ①.Native APP Native APP又称原生APP,就是我们平时说的手机应用软件. 原生APP 是针对IOS.Android.Windows等不同的手 ...

  8. php和asp渲染页面,Vue.js与 ASP.NET Core 服务端渲染功能

    在前端使用 Vue.js,Vue 服务端渲染直到第二个版本才被支持. 在本例中,我想展示如何将 Vue.js 服务端渲染功能整合 ASP.NET Core. 我们在服务端使用了 Microsoft.A ...

  9. 【工作记录】网易云信最近联系人中加入本地服务端数据

    网易云信最近联系人中加入本地服务端数据 1.实现效果如下(语音聊天中) 2.实现思路: 特定情况下: 1.获取聊天列表(最近联系人中id) 2.根据id,请求所有人的情况 3.刷新列表 3.具体实现: ...

  10. bootstraptable 加载完成_bootstrap table onLoadSuccess加载服务端数据成功事件

    bootstrap table onLoadSuccess加载服务端数据成功事件 bootstrap table onLoadSuccess加载服务端数据成功的事件,该事件的作用是什么呢?服务端返回自 ...

最新文章

  1. python相关性分析特征过滤_特征选择-Filter过滤法后续(相关,互信息法)
  2. 读书笔记-我所理解的生活
  3. 获取AD里面指定OU或Container里面的计算机以及Lastlogon时间格式转换
  4. vuex - 基础篇
  5. 程序员看过来:阿里毕玄提升代码能力的4段经历
  6. 分布式网站架构后续:zookeeper技术浅析
  7. 页面加载时间如何影响你的收益?
  8. JVM PermGen –您在哪里?
  9. 个人linux版本管理,浅谈各个Linux版本的个人看法
  10. GPU Raycasting的两种实现方法
  11. php使用iis6,php是与IIS6配合使用,搭建FastCGI环境
  12. 台式机XP系统调节屏幕亮度
  13. 2007 Microsoft Office 加载项:Microsoft Save as PDF 或 XPS
  14. 张张催人泪下 图说“工人阶级”的心酸谋生路
  15. python中count方法
  16. openwrt wifi 出现missing ACKs和deauthenticated due to inactivity 频繁掉线问题解决方案
  17. jupyter lab R
  18. Snipaste等截图px与浏览器内容px不一样
  19. 【Unity 骨骼动画】骨骼IK
  20. python实验室信息管理系统_有没有免费的实验室信息管理系统LIMS?

热门文章

  1. jquery.validation.js 表单验证
  2. javascript拾遗
  3. 10%的IOS设备已经更新到版本5.1.1
  4. less中mixins与extend的区别
  5. JAVA时间格式处理工具类
  6. httpd-2.2部署Discuz!论坛系统、wordpress博客系统和phpMyAdmin程序
  7. Bex5开发技巧之如何在列表中显示主键字段
  8. 单例设计模式(懒汉式,饿汉式)
  9. Red hat linux ping: unknown host www.baidu.com
  10. PHP经验——获得PHP版本信息及版本比较