在ASP.Net中使用AutoCompleteExtender

时间:2011-03-10 16:42:26

标签: asp.net vb.net autocomplete ajaxcontroltoolkit webmethod

今天大家怎么样?

问题
基本上,我今天正在深入研究AjaxControlToolkit的世界,主要目的是满足我的AutoComplete要求。我把所有内容都按照教程进行了设置,并且对于为什么事情不起作用感到有些困惑(好吧,我对于可能阻碍我的事情有所了解。)

我已经将AjaxControlToolkit dll添加到我的项目中,并且在我的Markup中我有以下内容:

在顶部

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxControlToolkit" %>

然后在我的内容中

<ajaxControlToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></ajaxControlToolkit:ToolkitScriptManager>

<asp:TextBox ID="txtSearch" runat="server" CssClass="search"></asp:TextBox>

<ajaxControlToolkit:AutoCompleteExtender ID="autoCompleteSearchExtender" runat="server" TargetControlID="txtSearch" ServiceMethod="GetCompletionList"></ajaxControlToolkit:AutoCompleteExtender>

然后在后面的代码中,我有一个很好的小函数(永远不会达到断点)

<System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()> _
    Public Function GetCompletionList(ByVal prefixText As String, ByVal count As Integer, ByVal contextKey As String) As String()
        ' Get current list
        Dim myList As List(Of MyClass) = GetSearchResultList()

        Return (From s In myList Select s.Name).ToArray()
    End Function

由于我不确定的原因,永远不会调用该函数。

潜在问题
有些问题可能会出现问题:

  • 我尝试将AjaxControlToolkit dll添加到VS(2010)中的工具栏,但所有控件都显示为灰色......
  • 我写的GetCompletionList函数(WebMethod)位于页面后面的代码中。这可不是因为它必须在Web服务中吗?
  • 我也刚刚意识到我在后面的代码中的功能不是共享,这是必需的吗?因为与自动完成相关联的列表是动态的。

任何帮助都将不胜感激。

提前致谢。

4 个答案:

答案 0 :(得分:0)

尝试将GetCompletionList函数放在Web服务中(asmx最简单)。确保web服务类具有[ScriptService]属性,并且您的函数具有[ScriptMethod]属性。

您还需要在AutoCompleteExtender的“ServicePath”属性中提供Web服务的路径(即ServicePath =“〜/ MyService.asmx”)

此外,除非从AutoCompleteExtender控件传递上下文密钥,否则您的函数中不需要“contextKey”参数。

HTH

答案 1 :(得分:0)

更新:添加这些属性并尝试使用。我已实现,它适用于Web方法后面的页面。

ServiceMethod="yourGetfunction"
MinimumPrefixLength="2" 
CompletionInterval="100"
EnableCaching="FALSE"
CompletionSetCount="20"

答案 2 :(得分:0)

您可以查看此解决方案:http://suggester.codeplex.com/

演示测试:http://show-demos.net/suggester/

它不是来自ALAX Toolkit,而是使用ASP.NET AJAX和jQuery,并且具有更丰富的功能

答案 3 :(得分:0)

我有点努力:

<WebMethod()> _
    Public Shared Function GetCompletionList(ByVal prefixText As String, ByVal count As Integer) As List(Of String)
        Dim listData As New List(Of String)
        listData.Add("A")
        listData.Add("B")
        listData.Add("C")
        Return listData
    End Function

我的HTML:

<form id="maincontent" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods = "true">
    </asp:ScriptManager>
    <div>
           <table style="margin-top:40px;color:White">  
            <tr>  
                <td>  
                    Type in your search:  
                </td>  
                <td>  
                    <asp:TextBox ID="searchBox" runat="server"></asp:TextBox>  
                    <asp:AutoCompleteExtender ServiceMethod="GetCompletionList" MinimumPrefixLength="1"  
                        CompletionInterval="10" EnableCaching="false" CompletionSetCount="1" TargetControlID="searchBox"  
                        ID="AutoCompleteExtenderPersonSearch" runat="server" FirstRowSelected="false">  
                    </asp:AutoCompleteExtender>  
                </td>
            </tr>  
        </table>  

    </div>
    </form>