2010-07-03 96 views
2

我有一個關於ASP.NET中的自動完成擴展器的問題 - 它在我擁有的所有頁面中工作正常,但不在母版頁中,我不知道爲什麼。AutocompleteExtender不能在母版頁中工作

這裏是我的代碼:

<asp:TextBox runat="server" ID="txtSearch" Width="200px" CssClass="TextBoxClass"></asp:TextBox> 
<cc1:AutoCompleteExtender ID="txtSearch_AutoCompleteExtender" runat="server" 
    TargetControlID="txtSearch" 
    CompletionInterval="0" 
    CompletionListCssClass="autocomplete_completionListElement" 
    CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem" 
    CompletionListItemCssClass="autocomplete_listItem" 
    CompletionSetCount="10" EnableCaching="true" MinimumPrefixLength="2" 
    ServiceMethod="GetCompletionListOggetti" 
    ShowOnlyCurrentWordInCompletionListItem="true" UseContextKey="True"> 
</cc1:AutoCompleteExtender> 

後面的代碼:

<System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()> _ 
Public Shared Function GetCompletionListOggetti(ByVal prefixText As String, ByVal count As Integer) As String() 
    ' Insert code to return a string array here… 
    Return AutoCompleteOggetti(prefixText) 
End Function 

的問題是,GetCompletionListOggetti不會被調用。

我再說一遍 - 它在內容頁面上工作正常!提前致謝。

回答

1

我通過把web方法(在你的情況下,GetCompletionListOggetti)放在內容頁面代碼背後的代碼而不是母版頁上來管理它。而且它僅適用於文件後面相同代碼中的web方法,而不適用於單獨的asmx服務。爲此,請不要忘記將EnablePageMethods =「true」屬性添加到腳本管理器。

看起來AutoCompleteExtender的服務方法在用戶(或自定義)控件的代碼內部定義的時候並不會被調用,而且母版頁確實是一種控件。

此修復程序的缺點是您必須在使用此母版頁的每個內容頁面中放置相同的服務方法。不是很優雅。另一個缺點是建議dropdownlist的css無法正常工作。儘管如此,我仍然無法弄清楚周圍的情況。有人更好的主意?

+0

「此修復程序的缺點是,你必須把相同的服務方法,在使用該母版頁EVERY內容頁面。」遺產? – ProfK 2013-07-01 17:42:33

2

您需要設置AutoCompleteExtender的ServicePath屬性來覆蓋回調到加載(非主頁)頁面的默認行爲。

添加您的函數到web服務頁面(的.asmx),虛擬頁面,或Default.aspx的等的代碼隱藏

如果使用web服務頁面,你將需要添加/取消註釋行:

<System.Web.Script.Services.ScriptService()> _ 

爲VB,或C#

[System.Web.Script.Services.ScriptService] 
相關問題