(一). 运行效果如下:

(二). AjaxPro.NET简介

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

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

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

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

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

 < httpHandlers >< add verb = " POST,GET "  path = " ajaxpro/*.ashx "  type = "AjaxPro.AjaxHandlerFactory, AjaxPro "   />
</ httpHandlers >

3. 在要使用AjaxPro.NET框架的页面 *.aspx.cs 的 Page_Load事件中加如下代码:

AjaxPro.Utility.RegisterTypeForAjax( typeof (_Default));

4. 经过以上三步骤后, 只要在后台服务端的方法前面增加属性[AjaxMethod]后:

  [AjaxMethod()]     //  or [AjaxPro.AjaxMethod] public  ArrayList GetSearchItems(  string  strQuery ){// 生成数据源ArrayList items  =   new  ArrayList();items.Add( " King " );items.Add( " Rose " );return  items ;} 

就可以在客户端直接使用服务端方法, 非常方便, 客户端调用后台代码如下:

 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       return  globalDiv;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 width        88          _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       else
156      {
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           return   true ;
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           return   true ;
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           return   false ;
198      }
199       else
200      {
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       return   true ;
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                   return  count;
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               else
250              {
251                  _unhighlightResult( divs[i] );
252              }
253          }
254      }
255       return  thisDiv;
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       try
272      {
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 代码如下:

< 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               return   true ;
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  public  partial  class  _Default : System.Web.UI.Page 2  {3       protected   void  Page_Load( object  sender, EventArgs e)4      {       5         Utility.RegisterTypeForAjax( typeof (_Default));6      }7 8     [AjaxMethod()] //  or [AjaxPro.AjaxMethod] 9      public  ArrayList GetSearchItems(  string  strQuery )
10     {
11         // 生成数据源
12        ArrayList items  =   new  ArrayList();
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  =   new  ArrayList();
23         foreach (  string  str  in  items )
24        {
25            if  (str.ToUpper().IndexOf(strQuery.ToUpper())  ==   0 )
26           {
27              selectItems.Add(str);
28           }
29        }
30         return  selectItems;
31     }
32  }

AjaxPro.NET使用,方便的在客户端直接调用服务端方法相关推荐

  1. android binder - 客户端(c++层) 调用 服务端(java层),服务端回调客户端 例子

    学习了: android binder - 客户端(java层) 调用 服务端(c++层) 例子 http://blog.csdn.net/ganyue803/article/details/4131 ...

  2. http 缓存分为客户端缓存和服务端缓存

    http 缓存分为客户端缓存和服务端缓存 1. 客户端缓存 客户端缓存指的是浏览器缓存, 浏览器缓存是最快的缓存, 因为它直接从本地获取(但有可能需要发送一个请求), 它的优势是可以减少网络流量, 加 ...

  3. 解决android客户端上传图片到服务端时,图片损坏的问题

    解决android客户端上传图片到服务端时,图片损坏的问题 参考文章: (1)解决android客户端上传图片到服务端时,图片损坏的问题 (2)https://www.cnblogs.com/cnbl ...

  4. grpc 客户端的context 服务端获取不到_MLamp;DEV[10] | gRPC的应用

    上一期和大家谈到了gRPC的快速开始,我么哪知道了gRPC是什么以及怎么快速启动,那么现在,我们来看看这个玩意具体内部是怎么运作的,这里我们同样以helloworld这个为例子来去谈.首先上期内容在这 ...

  5. Unity中进行网络通信:三:unity客户端和Unity服务端互相发消息

    目录 一.目的 1.想知道:Unity中进行网络通信:unity客户端和Unity服务端互相发消息 二.参考 1.unity3D中使用Socket进行数据通信(三) 三.操作:一:完成:在同一个Uni ...

  6. Linux Socket 两个客户端通信,服务端作为中转

    Socket 两个客户端通信,服务端作为中转 Socket两个客户端通信,服务端作为中转,通过sockket的通信原理,简单的做了一个以c语言写的服务端,与自己制作的Android app 与树莓派为 ...

  7. 附件统一处理starter,含附件客户端和附件服务端

    文章目录 附件统一处理starter,可分别作为附件客户端和附件服务端使用 一 关于项目中附件的概述 二 概要描述 三 附件starter功能划分 3.1 附件服务器,真实的存储附件 3.1.1 为前 ...

  8. RemObjects(一)客户端远程调用服务端接口过程

    RemObjects SDK 是高度封装的产物,对OOP发挥极致. 本文将以RemObjects SDK最简单的DEMO--FirstSample为例, 介绍客户端是如何完成远程调用服务端接口的全过程 ...

  9. Oracle客户端监听服务配置方法

    Oracle客户端监听服务配置方法 可直接修改tnsnames.oRA文件 Oracle客户端中一般有两个tnsnames.oRA文件,配置监听要修改的是Oracle客户端家目下的$ORACLE_HO ...

最新文章

  1. for循环语句的用法
  2. [图示]营销理论:不同时代的用户如何接受一个新事物?
  3. python下的所有文件_python批量复制文件夹下所有文件大小
  4. java多线程之CountDownLatch倒数闸门
  5. 62. 不同路径(JavaScript)
  6. setfacl 权限导出_setfacl getfacl 将某个目录的访问权限赋值给某个用户
  7. Sql Full-Text Filter
  8. 计算机端口详细介绍(整理版)
  9. 企业—pacemaker基本概念及其原理
  10. 金圣叹“不亦快哉”三十三则
  11. python输入语句没有定义_【20200925】Python基本语法
  12. matlab画中国地图深浅,matlab绘制中国地图
  13. context,request,response的作用,存活时间,简单上传下载操作
  14. Java使用Separator替代符号拼接
  15. wav 转换到 flac
  16. “手术机器人”掀起融资潮,行业正加速打破“达芬奇”神话
  17. 【好记性不如烂笔头】Spring框架内容问答的形式回忆-长期更新
  18. 机器学习-有监督无监督
  19. 设计师怎么优雅的薅羊毛——技能get!!
  20. 快消品企业为什么要上专业的费用管理系统

热门文章

  1. 使用无标注的数据训练Bert
  2. “网络白痴”初学SEO成长经验心得
  3. RTKLIB中利用Kalman滤波进行伪距单点定位
  4. 电脑c盘清理、电脑清理、电脑C盘成功瘦身15G左右
  5. 将网页分享到微信带有缩略图和简介
  6. 数字逻辑综合工具-DC-11——一些其它命令和综合之后的文件
  7. 华为服务器网口显示down,[已解决]华为三层交换机新建vlan后端口总是down的状态[已解决]~有好心人帮忙看看吗?谢谢~ - 华为技术论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  8. 剪映电脑版详细使用教程,让视频剪辑变得更简单了
  9. 从OA到COP,致远互联成引领行业的“灯塔”
  10. STM32 驱动温湿度传感器 HTU21D