2011-03-10 61 views
0

今天大家怎麼樣?與ASP.Net一起使用AutoCompleteExtender

的問題
基本上,我今天鑽研AjaxControlToolkit的世界,滿足我的要求,自動完成的主要目標。我已經把所有東西都設置爲了教程,並且對於爲什麼事情沒有起作用有點困惑(好吧,我有一個暗示,可能會阻止我回來)。

我已經添加了AjaxControlToolkit DLL到我的項目,我的標記,我有以下:

頂部

<%@ 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服務中?
  • 我也剛剛意識到我的代碼後面的功能不是共享,這是必需的嗎?因爲與自動完成關聯的列表是動態的。

任何幫助,將不勝感激。

在此先感謝。

+0

什麼是您的webmethod中的上下文關鍵參數?據我所知,你的原型簽名是錯誤的,你應該需要兩個參數:'prefixText(String),count(int)'(至少你沒有提供contextkey本身作爲屬性)。 [也許我失去了一些東西] – 2011-03-10 16:50:19

回答

0

試着把你的GetCompletionList函數放到一個web服務中(asmx是最簡單的)。確保Web服務類具有[ScriptService]屬性,並且您的函數具有[ScriptMethod]屬性。

你還需要的路徑提供給您的AutoCompleteExtender的「ServicePath」屬性(即ServicePath =「〜/ MyService.asmx」)的Web服務

而且,你不需要「 contextKey「參數,除非您從AutoCompleteExtender控件傳遞一個上下文鍵。

hth

+0

這是否意味着我嘗試它的方式是不可能的?因爲如果可能的話,我非常想避免使用這種方法。 – ThePower 2011-03-10 16:59:34

+0

您可以使用AutoCompleteExtender與Web服務或使用頁面方法。爲了使用頁面方法,您必須首先在腳本管理器中啓用頁面方法。頁面方法本身必須是靜態的(或在vb中共享)。以下鏈接引導您使用頁面方法代替Web服務:http://allwrong.wordpress.com/2007/03/13/ms-ajax-autocomplete-extender-using-a-page-method/ – blech 2011-03-10 17:57:00

+0

很好的鏈接,謝謝你。 – ThePower 2011-03-11 08:26:03

0

更新:添加這些屬性並嘗試它。我已經實現了,它可以在網頁後面的頁面中使用。

ServiceMethod="yourGetfunction" 
MinimumPrefixLength="2" 
CompletionInterval="100" 
EnableCaching="FALSE" 
CompletionSetCount="20" 
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>