AjaxPro.NET完成TextBox智能获取服务端数据功能(Asp.net 2.0)(示例代码下载)

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

 

学习  [征服Ajax——Web 2.0快速入门与项目实践(.net)] 

(一). 运行效果如下:

(二). 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  public  ArrayList GetSearchItems(  string  strQuery )
 3  {
 4        // 生成数据源
 5       ArrayList items  =   new  ArrayList();
 6       items.Add( " King " );
 7       items.Add( " Rose " );
 8        return  items ;
 9 
10 
 
        就可以在客户端直接使用服务端方法, 非常方便, 客户端调用后台代码如下:
var returnValue  =  后台代码类名.GetSearchItems(参数);

(四). 详细代码如下:

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

  1  /// / JScript File
  2  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       else
 27      {
 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 代码如下:

 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               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  }

(五). 示例代码下载

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

你可能感兴趣的:(asp.net)