ajaxToolkit 是微软官方的一个ajax控件包,? AutoCompleteExtender 就是其中之一. 需要引用ajaxToolkit.dll
达到的效果就是像baidu的输入查询条件带出提示的效果。
前台文本框:
<asp:TextBox ID="txt1" runat="server"></asp:TextBox>
这就是一个默认的文本框,不需要任何多余的设定.? 然后定义一个AutoCompleteExtender,这里我们只设置了最基本的选项,其它的选项后面我会说明:
<ajaxToolkit:AutoCompleteExtender ID="ac1" runat="server" TargetControlID="txt1" ServicePath="webservice.asmx"? //? 这边放的是webservice名字??? ServiceMethod="GetTextList" MinimumPrefixLength="1" ></ajaxToolkit:AutoCompleteExtender>
这样,前台的工作就完成了。
后台要添加一个webservice服务。
?
namespace AJAXEnabledWebApplication3
{
??? /// <summary>
??? /// Summary description for AutoComplete
??? /// </summary>
??? [WebService(Namespace = "http://tempuri.org/")]
??? [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
??? [System.Web.Script.Services.ScriptService]
??? [ToolboxItem(false)]
??? public class AutoComplete : System.Web.Services.WebService
??? {
??????? public static string[] autoCompleteTextList = null;
??????? [WebMethod]
??????? public string HelloWorld()
??????? {
??????????? return "Hello World";
??????? }
??????? [WebMethod]
??????? public string[] GetTextList(string prefixText,int count)
??????? {?? ///检测参数是否为空
??????????? if (string.IsNullOrEmpty(prefixText) == true || count <= 0) return null;
??????????? if (autoCompleteTextList == null)
??????????? {
??????????????? //获取data.txt文件的数据
??????????????? StreamReader reader = new StreamReader(Server.MapPath("data.txt"));
??????????????? //按行方式读取data.txt文件的数据
??????????????? ArrayList list = new ArrayList();
??????????????? string rowString = reader.ReadLine();
??????????????? while (rowString != null)
??????????????? {?? ///读取一行
??????????????????? list.Add(rowString);
??????????????????? rowString = reader.ReadLine();
??????????????? }
??????????????? reader.Close();
??????????????? //将获取的内容保存到临时数组中
??????????????? string[] tempTextList = new string[list.Count];
??????????????? int i = 0;
??????????????? foreach (string s in list)
??????????????? {
??????????????????? tempTextList[i++] = s;
??????????????? }
??????????????? //对数组进行排序
??????????????? Array.Sort(tempTextList,new CaseInsensitiveComparer());
??????????????? autoCompleteTextList = tempTextList;
??????????? }
??????????? //定位二叉树搜索的起点
??????????? int index = Array.BinarySearch(autoCompleteTextList,prefixText,new CaseInsensitiveComparer());
??????????? if (index < 0)
??????????? {
??????????????? //修正起点
??????????????? index = ~index;
??????????? }
??????????? //搜索符合条件的数据
??????????? int matchCount = 0;
??????????? for (matchCount = 0; matchCount < count && matchCount + index < autoCompleteTextList.Length; matchCount++)
??????????? {
??????????????? //查看开头字符串相同的项
??????????????? if (autoCompleteTextList[index + matchCount].StartsWith(prefixText,StringComparison.CurrentCultureIgnoreCase) == false)
??????????????? { break; }
??????????? }
??????????? //处理搜索结果
??????????? string[] matchResultList = new string[matchCount];
??????????? if (matchCount > 0)
??????????? {
??????????????? //复制搜索结果
??????????????? Array.Copy(autoCompleteTextList,index,matchResultList,matchCount);
??????????? }
??????????? return matchResultList;
??????? }
??? }
}
?
这样就可以浏览效果了