使用AutoCompleteExtender实现文本框自动匹配注意事项
今天使用AutoCompleteExtender实现文本框自动匹配,过程中遇到了一些问题,具体如下:
如图,页面代码:
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:TextBox ID="txtProductKey" runat="server" Text=""></asp:TextBox>
<AjaxControlToolkit:AutoCompleteExtender runat="server" ID="AutoCompleteExtender1"
MinimumPrefixLength="1"
CompletionSetCount="15"
EnableCaching="true"
ServicePath="WebService/SearchKeyList.asmx"
ServiceMethod="GetProductByKeywords"
TargetControlID="txtProductKey"
CompletionInterval="1000"
BehaviorID="autoCompleteBehavior1">
</AjaxControlToolkit:AutoCompleteExtender>
</div>
</form>
</body>
TextBox和通常的没有任何区别,所以我们只要看下AutoCompleteExtender就可以了。我们设置了这样几个属性:
·TargetControlID:因为它是一个Extender扩展控件,相当于是扩展了现有控件的功能,所以这个TargetControlID说明了它要对哪个控件进行扩展,此处为TextBox1。
·ServicePath:指明了要使用的服务,注意这里只需写名称,而无需指定全路径。
·ServiceMethod:服务的方法名称,即是上面所指定的GetCityList。
·MinimumPrefixLength:当文本框中输入的字符串小于这个长度时,不进行匹配,可以看到,这个可以满足我们一开始所说到的第3条。
·CompletionSetCount:返回的最大的匹配数,也就是GetCityList的count参数的值。
·EnableCaching:启用缓存,将之前匹配的结果缓存起来。
注意:
1.为了TextBox和自动填充显示的字体样式一样,最好把这两个放在一个div中。
2.不要把TextBox和AutoCompleteExtender放在UpdatePanel控件中,否则就不能用了。
WebService 代码:
/// <summary>
///SearchKeyList 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]
public class SearchKeyList : System.Web.Services.WebService {
public SearchKeyList () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
/// <summary>
/// 获取词典里面的关键词
/// </summary>
/// <param name="key"></param>
/// <param name="count"></param>
/// <returns></returns>
[WebMethod]
public string[] GetSearchByKeywords(string prefixText, int count)
{
StringBuilder str = new StringBuilder();
List<string> results = new List<string>();
int num = 0;
List<SearchWordResult> list = new WordDictionary().Search(prefixText);
for (int i = 0; i < list.Count; i++)
{
if (!results.ToString().Contains(list[i].ToString()))
{
num++;
results.Add(list[i].ToString());
}
if (num == count)
{
break;
}
}
return rtnArrList(results);
}
}
注意:
1、头部需加上[System.Web.Script.Services.ScriptService]这一句,不然不可用
2、方法里面的两个参数(string prefixText, int count),名字最好和这个一致,我开始做的时候,另外起的名字,造成无法运行WebService方法。

浙公网安备 33010602011771号