2011-04-22 84 views
2

我遵循一個非常簡單的使用ajax進行自動完成的例子,無法讓我的工作。我踩了代碼,它看起來像它永遠不會去我的webmethod。還有什麼要檢查的?WebMethod未被調用。 ASP.NET C#

的.aspx

<asp:ScriptManager ID="ScriptManager1" runat="server"> 

    </asp:ScriptManager> 

<asp:TextBox ID="txtFrom" runat="server"> 
</asp:TextBox> 
<ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtFrom" MinimumPrefixLength="1" ServiceMethod="GetSuggestions"> 
</ajaxToolkit:AutoCompleteExtender> 

.aspx.cs

[System.Web.Services.WebMethod] 
[System.Web.Script.Services.ScriptMethod] 
public static string[] GetSuggestions(string prefixText, int count, string contextKey) 
{ 
    string[] members = { "Nick", "John", "Bob" }; 

    return (from m in members where m.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase) select m).Take(count).ToArray(); 
} 

我創建了一個Web服務使用,而不是直接把我的方法的類,但我得到了相同的結果。

+0

您的web方法是靜態的嗎?它只能是靜態的,如果它在一個頁面內。 – 2011-04-22 19:28:30

回答

2
public static string[] GetSuggestions(string prefixText, int count, string contxtKey) 

你寫contxtKey,而不是contextKey

記住,簽名(類型,參數名稱,返回類型)has to match exactly

如果上下文鍵時,它應該 有String類型的名爲contextKey 的 附加參數相同的簽名:

[System.Web.Services.WebMethod] 
[System.Web.Script.Services.ScriptMethod] 
public string[] GetCompletionList(
    string prefixText, int count, string contextKey) { ... } 

請注意,您可以取代 「 GetCompletionList「的名稱爲 您的選擇,但返回類型和 參數名稱和類型必須完全匹配 ,我包括案件。

+0

好的,我將其更改爲contextKey,但它仍然不會調用它/ work。難道它不應該跳過這個方法嗎? – John 2011-04-22 19:38:06

+0

好的,我只是刪除了整個字符串contextKey,現在它工作。謝謝 – John 2011-04-22 19:40:12

+0

不用客氣,如果將「UseContextKey」和「ContextKey」屬性都添加到AutoCompleteExtender控件中,則包含「string contextKey」的函數應該可以正常工作。 – Larry 2011-04-22 19:44:05

1

它不會出現你的ScriptManager被配置爲允許頁面方法,但你的「GetSuggestions」是一個網頁的方法(上.aspx.cs),而不是服務電話(上的.asmx) 。

嘗試編輯腳本管理器看起來像:

<asp:ScriptManager 
ID=」scriptManager」 
EnablePageMethods=」true」 
runat=」server」 > 

如果你想你的方法調用移動到的.asmx那麼你的AutoCompleteExtender應該進行修改,以引用.asmx文件是這樣的:

<ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtFrom" MinimumPrefixLength="1" ServiceMethod="GetSuggestions" ServicePath="AutoCompleteService.asmx"> 
        </ajaxToolkit:AutoCompleteExtender> 

我想你只是試圖混合這兩種技術,最後只是有點關閉。