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

    技术2022-05-11  89

    学习  [征服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://www.cnblogs.com/Files/ChengKing/AjaxPro.NET_AutoQueryTextBox.rar

     

    最新回复(0)