Kamil Kliczbor @ asptip.net

23Jul/090

AjaxToolkit Multi-word AutoCompleteExtender

Tworząc dynamiczne strony, często z konieczności potrzebujemy użyć podpowiedzi dla użytkownika. Z pomocą przychodzi oczywiście standardowo AjaxControlToolkit z kontrolką AutoCompleteExtender. Jest to kontrolka, która pozwala na wykorzystanie w wielu scenariuszach. Najprostszym z nich jest wyświetlanie podpowiedzi do wpisanego słowa w postaci listy. A co jeżeli chcielibyśmy, aby nasz "podpowiadator" pomagał przy wpisywaniu każdego słowa osobno ? Otóż można skonfigurować ten komponent tak, żeby nam to ułatwił. Parametry kontrolki:

<ajaxToolkit:AutoCompleteExtender ID="aceTags" runat="server" 

             TargetControlID="tbTags"

             ServiceMethod="GetCompletionList" 

             MinimumPrefixLength="2"

             ServicePath="~/WS/Service.asmx"

             CompletionInterval="400"

             DelimiterCharacters="," 

             ShowOnlyCurrentWordInCompletionListItem="true" />

Krótkie objaśnienie:
ServiceMethod to nazwa metody w webserwisie, do którego się odwołujemy, a
ServicePath to ścieżka do tego webserwisu.
DelimiterCharacters określa jaki znak będzie oddzielał poszczególne elementy,
i wreszcie chyba najważniejsze to to, że ustawienie paramteru ShowOnlyCurrentWordInCompletionListItem na true powoduje, że podpowiadany jest tylko bieżący element z listy.

No i śmiga :)

A teraz kilka błędów:
1. Tworzony web service musi mieć atrybut [ScriptService].
2. Metoda sweb servicu musi być public string[] MojaMetoda (string prefixText, int count), (opcjonalnie można dodać jeszcze jeden parametr - można doczytać). Trzeba zwrócić uwagę, że metoda nie jest statyczna i dodatkowo nie można modyfikować nazwy jej parametrów wejściowych. Sysgnatura metody może być dowolna. Metodę taką trzeba dodatkowo zaopatrzyć w atrybut [ScriptMethod].
3. Jeżeli coś nie działa, sprawdź czy możesz się dobić do webservisu. Ścieżka wygląda na taką modłe http://localhost/WS/Service.asmx, gdzie oczywiście katalog i nazwa serwisu zależą od własnej implementacji. Jeżeli WS jest widoczny, to powinieneś móc sobie wywołać twoją metodę z przeglądarki.
4. Sprawdź czy dobrze się odwołujesz do odpowiedniego WS w kodzie kontrolki.