博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

(一). 运行效果如下:

(二). 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       foreachstring str in items )
24       {
25          if (str.ToUpper().IndexOf(strQuery.ToUpper()) == 0)
26          {
27             selectItems.Add(str);
28          }
29       }
30       return selectItems;
31    }  
32 }

(五). 示例代码下载

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


原文地址
http://www.cnblogs.com/MVP33650/archive/2007/04/27/730319.html