Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AutoCompleteXtender每次都显示所有500个选项_C#_Asp.net_Autocompleteextender - Fatal编程技术网

C# AutoCompleteXtender每次都显示所有500个选项

C# AutoCompleteXtender每次都显示所有500个选项,c#,asp.net,autocompleteextender,C#,Asp.net,Autocompleteextender,我有一个带有AutoCompleteXtender的文本框,而不是使用Web服务,我只是在代码隐藏中有一个方法,可以从xml中提取字符串名称列表。现在,每次在文本框中启动时,AutoCompleteXtender都会显示所有500个名称。也没有顺序,例如,如果我输入Riha开始输入Rihana,你会认为只有以Riha开头的字符串会出现,但所有500个都会出现,甚至不会以任何顺序出现。我尝试将CompletionSetCount设置为5,但没有成功。有没有简单的解决办法 我相信这部分代码运行正常

我有一个带有AutoCompleteXtender的文本框,而不是使用Web服务,我只是在代码隐藏中有一个方法,可以从xml中提取字符串名称列表。现在,每次在文本框中启动时,AutoCompleteXtender都会显示所有500个名称。也没有顺序,例如,如果我输入Riha开始输入Rihana,你会认为只有以Riha开头的字符串会出现,但所有500个都会出现,甚至不会以任何顺序出现。我尝试将CompletionSetCount设置为5,但没有成功。有没有简单的解决办法

我相信这部分代码运行正常

[System.Web.Script.Services.ScriptMethod()]
[System.Web.Services.WebMethod]
public static List<string> GetNames(string prefixText, int count)
{
    XmlDocument xmlArtist = new XmlDocument();        
    xmlArtist.Load(string.Format(" http://ws.audioscrobbler.com/2.0/?method=chart.gettopartists&api_key={0}&limit=500",  key));
    List<string> topartists = new List<string>();
             foreach (XmlNode node in xmlArtist.SelectNodes("lfm/artists/artist"))
             {                     
                 topartists.Add(node.SelectSingleNode("name").InnerText.ToString());
             }
             return topartists;            
}
这是.aspx代码

    <asp:TextBox ID="txtEnterBand" runat="server" CssClass="txtbox" Width="400px"  >     </asp:TextBox>
<asp:AutoCompleteExtender ID="txtEnterBand_AutoCompleteExtender" runat="server" TargetControlID="txtEnterBand" ServiceMethod="GetNames" UseContextKey="true" ServicePath="" MinimumPrefixLength="1" CompletionSetCount="5"></asp:AutoCompleteExtender>
在源页面中:

<asp:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" 
UseContextKey="True"  TargetControlID="txtAuto" ServiceMethod="SearchCustomers" 
MinimumPrefixLength="2" CompletionInterval="100" EnableCaching="false" 
CompletionSetCount="10" FirstRowSelected="false" 
OnClientItemSelected="ClientItemSelected">
</asp:AutoCompleteExtender>

在标记中添加此PropertyUserContextKey=True。

为什么不限制代码中返回的内容?代替foreach,为i=0做a;iBtw,CompletionSetCount会传递给您的web服务,它不会限制自身的任何内容。我认为AutoCompleteXtender会自动将文本框中的内容与列表进行比较,我认为我缺少的只是一个属性。我是否必须传递文本框中的内容,并每次手动将其与所有500个名称进行比较?它使用越来越多的值连续调用您的Web服务,例如prefix=mysea,然后prefix=mysear,prefix=mysearc等。所以您应该在方法中进行比较和限制OK,我想这很容易,我只是觉得它自己比较-还有一件事,我怎么能把顶级艺术家名单存储在内存中的某个地方,这样它就不必每次都请求它了。它不允许我从GetNames方法访问会话状态。对如何临时存储该列表有什么建议吗?
<asp:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" 
UseContextKey="True"  TargetControlID="txtAuto" ServiceMethod="SearchCustomers" 
MinimumPrefixLength="2" CompletionInterval="100" EnableCaching="false" 
CompletionSetCount="10" FirstRowSelected="false" 
OnClientItemSelected="ClientItemSelected">
</asp:AutoCompleteExtender>