1

因为我使用这种方法自动完成这是我的第一次,经过几个小时的研究我确实设法“让它工作”我还不明白为什么但该方法的行为很奇怪,我得到了自动完成的选项列表,尽管它没有在正确的可能匹配上“主页”,而是停留在文本框下的第一行。

声明

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ac" %>

这是我使用的标签我 aspx

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"  EnablePartialRendering="true">
</asp:ScriptManager>

                    <asp:TextBox ID="TBX_theMonthInsert" runat="server" Width="60" />

ajax部分

<ac:AutoCompleteExtender ID="AutoCompleteExtender1" EnableCaching="true" 
BehaviorID="AutoCompleteCities" TargetControlID="TBX_theMonthInsert" 
        ServiceMethod="GenerateMonthNames" MinimumPrefixLength="2"
        ContextKey="GenerateMonthNames"  CompletionSetCount="2" runat="server" 

        FirstRowSelected="true" CompletionInterval="350" ShowOnlyCurrentWordInCompletionListItem="true">
                   </ac:AutoCompleteExtender>

背后的代码

        [ScriptMethod()]
        [WebMethod]
        public static string[] GenerateMonthNames(string prefixText, int count, string contextKey)
        {
            List<string> items = new List<string>();
            items.Add("Oliver");
            items.Add("Olsen");
            items.Add("learns");
            items.Add("how");
            items.Add("change");
            items.Add("world");
            items.Add("engaging");


            return items.ToArray();
        }
4

1 回答 1

0

问题在于在GenerateMonthNames forprefixText参数中搜索 /query

    public static List<string> GenerateMonthNames(string prefixText)
    {
      List<string> items = new List<string>();
         items.Add("Oliver");
         items.Add("Olsen");
         items.Add("learns");
         items.Add("how");
         items.Add("change");
         items.Add("world");
         items.Add("engaging");  

         var returnList = items.Where(item=>item.Contains(prefixTest)).ToList();
         returnList.Sort();
         return returnList; 
     }

这就是我在自动完成代码后面部分中缺少的内容。

当您在目标 TextBox 内输入时,您正在激活“文本更改”触发器以执行 ajax 自动完成功能。

它是触发 Ajax 的文本框文本更改事件 - 自动完成“命令”背后的代码

然后它将 prefixText 作为参数发送到目标 TextBox 内的每个击键,

方法背后的代码(在本例中为“GenerateMonthNames”)在列表的每个元素中搜索部分文本(prefixText 参数),然后过滤掉(即我丢失的部分,例如“它不工作”)不包含您在目标 TextBox 中输入的文本。我希望它能澄清其他一些对使用 ajax autoComplete 也有同样问题的新手。

于 2012-09-19T06:57:45.620 回答