带有ajax自动完成功能的asp文本框确实有效,但没有真正选择

时间:2012-09-19 03:54:29

标签: c# asp.net ajax autocomplete

因为我正在使用这种方法进行自动完成,这是我的第一次,我确实设法“让它工作”之后 几个小时的研究我还不明白为什么但是方法的行为很奇怪,我得到了自动完成的选项列表,虽然它没有 右侧可能匹配的“home”相反停留在文本框下的第一行。

声明

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

这是我正在使用的标签

<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();
        }

1 个答案:

答案 0 :(得分:0)

问题出在GenerateMonthNames内的搜索/查询 对于prefixText参数

    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; 
     }

这就是我在autoComplete - Code behind部分中遗漏的内容。

当您在目标TextBox中键入内容时,您正在激活“on text changed”触发器以执行ajax自动完成功能。

是触发Ajax的textBox文本Changed Event - 自动完成“command”后面的代码

然后它将prefixText作为参数发送,每个键击都在目标TextBox中,

后面的代码方法(在此示例中为“GenerateMonthNames”)正在列表的每个元素中搜索部分文本(prefixText参数),然后过滤掉(这是我缺少的部分,例如“它不工作”)不包含您在目标TextBox中输入的文本的元素。 我希望它能澄清一些使用ajax autoComplete的新手 面临同样的问题。