TextBox AutoCompleteExtender自动完成
概述
TextBox的AutoComplete有的时候对我们很有用,你可能也见过这样的功能。
本文展示如何使用AJAX Control Toolkit来实现这个功能,几乎所有的文章都是描述如何使用Ajax通过Web服务获取自动完成的文本,但本文介绍如何从aspx code文件中返回所需要的数据,而不是通过Web服务。
示例
如果你还没有下载AJAX Control Toolkit。可以通过这里http://www.asp.net/ajaxlibrary/act.ashx 获取介绍和工具包。我们这里使用Visual studio 2010创建一个ASP.NET Web项目,然后应用AJAX toolkit 的dll。将一个文本框TextBox控件拖拽到default.aspx页面。
为工具箱添加AJAX Control Tookit
1.右键单击工具箱的空白处添加一个新的选项卡AJAX Control Toolkit。
2.右键单击AJAX Control Tookit空白处,选择Choose Items菜单。
在打开的对话框中单击浏览按钮,找到AJAX Control Toolkit的dll文件并添加,如下图所示:
单击OK后,AJAX Control Tookit的所有控件就被添加到选项卡中:
这真是一个不错的工具库,特别是对于哪些不是很熟悉脚本(JS/JQuery)的开发人员是个不错的选择。
添加代码
1.为了要使用这些控件,我要在页面上继续拖拽一个ToolkitScriptManager控件。
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>
<h2>
Welcome to ASP.NET!</h2>
<h2>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</h2>
</asp:Content>
2.继续添加我们需要的AutoCompleteControlExtender到default.aspx。
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:AutoCompleteExtender
ID="AutoCompleteExtender1"
runat="server"
ServiceMethod="GetDatas"
TargetControlID="TextBox1">
</asp:AutoCompleteExtender>
TargetControlID指定关联的控件。ServiceMethod指定返回所需要数据的方法。
3.在default.aspx.cs文件中添加GetDatas静态方法。
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static string[] GetDatas(string prefixText, int count)
{
string[] strArray = { "ASP.NET","ASP.NET培训","ASP.NET工程师",
"Google","Google翻译","Google总部"};
return (from m in strArray
where m.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase)
select m).Take(count).ToArray(); ;
}
我们使用LIINQ查询表达式来筛选需要的数据,返回prefixText前缀字符的count个数的集合。Take是返回前n个数据。
注意
- ServiceMethod中指定的方法需要声明成static类型,而且还要添加WebMethod和ScriptMethod特性说明。
- 方法的参数是 prefixText表示前缀字符,count自动完成建议的个数(默认10个),而且参数的名称和类型都不能改变。
- 方法返回一个字符串数组。
结果如下:
还可以通过指定AutoCompleteExtender的属性 MinimumPrefixLength来指定启动自动完成前缀字符的个数。设置样式,字符串分隔符号以及客户端的一些操作等等。更多内容请浏览参考资料。
代码下载
AutoComplete.zip
更多内容欢迎订阅邮件列表: