Rambler's Top100

Atlas, первые шаги. Autocomplete

Недавняя статья "Atlas, первые шаги" оказалась достаточно востребованной, что, в условиях нехватки информации по Atlas, и не удивительно. Сегодня мы продолжаем серию и публикуем вторую статью, написанную уважаемым Exception для форума Vingrad и посвященную Atlas, микрософтовской реализации AJAX. Сегодня речь пойдет об автодополнении. Итак, для начала нам нужно создать Web-сервис, предоставляющий список строк для автозаполнения. Это сделать нетрудно. Вот код этого сервиса: Namespace AtlasTest <WebService(Namespace:="http://tempuri.org/")> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ Public Class WebService Inherits System.Web.Services.WebService Private members As String() = _ {"arilou", "mr.DUDA", "chipset", "alir", "Exception", "Wowa", "Vit", _ "Poseidon", "2man", "Akina", "cardinal", "DezmASter", "bagira", _ "SoWa", "Kagor", "Pegas", "sergej.z", "Gannibal", "ivashkanet", _ "VisualProgrammerNET", "asdf", "oleg1973", "Guedda"} Private _prefixText As String <WebMethod()> _ Public Function GetWordList(ByVal prefixText As String, ByVal count As Integer) As String() _prefixText = prefixText Dim resultArray(count) As String resultArray = Array.FindAll(members, AddressOf ArrayFilter) Return resultArray End Function Private Function ArrayFilter(ByVal item As String) As Boolean Return item.StartsWith(_prefix, StringComparison.InvariantCultureIgnoreCase) End Function End Class End Namespace namespace AtlasTest [WebService(Namespace="http://tempuri.org/")] _ [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)] public class WebService : System.Web.Services.WebService { private string members[] = {"arilou", "mr.DUDA", "chipset", "alir", "Exception", "Wowa", "Vit", "Poseidon", "2man", "Akina", "cardinal", "DezmASter", "bagira", "SoWa", "Kagor", "Pegas", "sergej.z", "Gannibal", "ivashkanet", "VisualProgrammerNET", "asdf", "oleg1973", "Guedda"}; private string _prefix; [WebMethod] public string[] GetWordList(string prefixText, int count) { _prefix = prefixText; string[] resultArray = new string[count]; resultArray = Array.FindAll(members, new System.Predicate<string>(ArrayFilter)); return resultArray; } private bool ArrayFilter(string item) { return item.StartsWith(_prefix, StringComparison.InvariantCultureIgnoreCase); } } } Работа этого сервиса проста. Если смотреть на него, как на "чёрный ящик", то можно составить такое описание метода GetWordList: GetWordList Параметры: * prefixText - текст, набранный пользователем * count - количество результатов Результирующее значение: массив, состоящий из не более count строк, начинающихся с префикса prefixText. Например, если пользователь наберёт "c" на клавиатуре, то в ответ ему придут "chipset" и "cardinal", если, конечно, count больше или равен двум. Хорошо, мы написали сервис. Что дальше? Как обычно, добавьте на страницу контрол ScriptManager: <atlas:ScriptManager ID="MyScriptManager" runat="server" /> Далее, добавьте на форму самый что ни на есть обыкновенный TextBox: <asp:TextBox ID="MyTextBox" runat="server" /> Теперь приступим к самому главному. Для добавления к полю AutoComplete-поведения нобходимо объявить соответствующий элемент: <atlas:AutoCompleteExtender runat="server" ID="MyAutoCompleteExtender"> </atlas:AutoCompleteExtender> Этот контрол позволяет расширять любой TextBox на странице путём добавления соответствующего тега: <atlas:AutoCompleteProperties TargetControlID="MyTextBox" Enabled="True" ServicePath="WebService.asmx" ServiceMethod="GetWordList" MinimumPrefixLength="1" /> Всё просто, не так ли? Всё, автозаполнение работает! Полный код страницы: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Yo</title> </head> <body> <form id="mainForm" runat="server"> <atlas:ScriptManager ID="MyScriptManager" runat="server" /> <div id="content"> <asp:TextBox ID="MyTextBox" runat="server" /> <atlas:AutoCompleteExtender runat="server" ID="MyAutoCompleteExtender"> <atlas:AutoCompleteProperties TargetControlID="MyTextBox" Enabled="True" ServicePath="WebService.asmx" ServiceMethod="GetWordList" MinimumPrefixLength="1" /> </atlas:AutoCompleteExtender> </div> </form> </body> </html> В следующем обзоре мы рассмотрим, как сделать Drag&Drop на странице.
 
Еще об этом:

Комментарии: 4

  1. jimy 2.08.2006 10:23

    спасибо за туториал. только очень бы хотелось увидеть рабочий пример

  2. Just_Sha 16.08.2006 10:10

    Все просто отлично, тока в коде для web-сервиса (c# version), для переменной members забыли поставить квадр. скобки (все-таки это же Array, как-никак) и в конце точку с запятой. А то пахать не будет.

    private string[] members ={…bla-bla-bla …};

  3. Just_Sha 16.08.2006 10:12

    Все просто отлично, тока в коде для web-сервиса (c# version), для переменной members забыли поставить квадр. скобки (все-таки это же Array, как-никак) и в конце точку с запятой. А то пахать не будет.

  4. celarent 16.08.2006 10:25

    угу… на самом деле, особо тяжко с vb-шным кодом — tinymce в wordpress норовит его поправить…

Добавить комментарий