使用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方法。

 

 

posted @ 2012-09-25 11:40  A Moon  阅读(156)  评论(0)    收藏  举报