2010-07-03 3 views
2

J'ai un problème concernant l'extension automatique dans ASP.NET - il fonctionne très bien dans toutes les pages que j'ai, mais pas dans une page maître et je ne sais pas pourquoi.AutocompleteExtender ne fonctionne pas dans la page maître

Voici mon code:

<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> 

code derrière:

<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 

Le problème est que GetCompletionListOggetti est jamais appelé.

Je répète - cela fonctionne très bien sur la page de contenu! Merci d'avance.

Répondre

1

Je l'ai géré en mettant la méthode web (dans votre cas, GetCompletionListOggetti) dans le code derrière le fichier de la page de contenu au lieu de la page maître. Et cela fonctionne seulement pour la méthode web dans le même code derrière le fichier pas dans un service asmx séparé. Pour cela, n'oubliez pas d'ajouter la propriété EnablePageMethods = "true" à votre gestionnaire de scripts.

Il semble que la méthode de service d'AutoCompleteExtender ne soit jamais appelée lorsqu'elle est définie dans le code derrière un fichier de contrôle utilisateur (ou personnalisé) et qu'une page maître est en quelque sorte un contrôle. L'inconvénient de ce correctif est que vous devez mettre la même méthode de service dans chaque page de contenu qui utilise cette page maître. Pas très élégant. Un autre inconvénient est en quelque sorte la liste déroulante css de suggestion ne fonctionne pas correctement. Pourtant, je ne pouvais pas comprendre le walkaround. Quelqu'un de meilleure idée?

+0

« l'inconvénient de ce correctif est que vous devez mettre la même méthode de service dans chaque page de contenu qui utilise cette page principale. » Héritage? – ProfK

2

Vous devez définir la propriété ServicePath de l'AutoCompleteExtender pour remplacer le comportement par défaut de rappel à la page de chargement (non maître).

Ajoutez votre fonction au code-behind d'une page webservice (.asmx), une page factice, ou default.aspx etc.

Si vous utilisez une page webservice, vous devez ajouter/décommenter la ligne :

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

pour VB ou C#

[System.Web.Script.Services.ScriptService]