Atlas, первые шаги. Autocomplete
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 на странице.
Еще об этом:
спасибо за туториал. только очень бы хотелось увидеть рабочий пример
Все просто отлично, тока в коде для web-сервиса (c# version), для переменной members забыли поставить квадр. скобки (все-таки это же Array, как-никак) и в конце точку с запятой. А то пахать не будет.
…
private string[] members ={…bla-bla-bla …};
…
Все просто отлично, тока в коде для web-сервиса (c# version), для переменной members забыли поставить квадр. скобки (все-таки это же Array, как-никак) и в конце точку с запятой. А то пахать не будет.
угу… на самом деле, особо тяжко с vb-шным кодом — tinymce в wordpress норовит его поправить…