.NET... цена и стоимость сайта, разработка web-дизайна! ASP.NET! web-дизайн! сайт недорого, создание продвижение сайтов! разработка бизнес сайта... Оптимизация, продвижение сайтов... заказать сайт. Аутсорсинг. it outsourcing: стоимость сайта: продвижение сайта! C#. создание web сайтов быстро; Cоздание сайтов различной сложности. Цена веб-сайта. создание сайта, создание web сайтов красиво; Cоздание сайтов дешево; MSSQL... ASP; Бизнес сайт! веб-дизайн, разработка сайтов web дизайн студия. ! создание web сайтов качественно outsourcing. : концепция дизайна: разработка сайта... заказ сайта! Cоздание сайтов качественно: Cоздание сайтов разработка сайта. , цена бизнес сайта, дизайн сайта, корпоративный сайт; раскрутка сайта: цена сайта, Самые маленькие цены и сроки реализации сайтов: Cоздание сайтов быстро... Cоздание сайта, оптимизация

веб решения

. , Разработка сайта, изготовление сайтов! Microsoft SQL Server 2005: цена web-сайта: создание бизнес сайта; создание сайта: Создать сайт, Бизнес сайт... Cоздание сайтов красиво... Разработка, ИТ аутсорсинг... сайты дешево, создание web сайтов дешево; стильный сайт

создание продвижение сайтов

. ; продвижение сайта, Оптимизация, продвижение сайтов. Самые маленькие цены и сроки реализации сайтов! ИТ аутсорсинг... Бизнес сайт... концепция дизайна. цена сайта! C#: ASP.NET: Бизнес сайт; создание бизнес сайта, создание web сайтов быстро, разработка сайта: outsourcing; Разработка сайта, веб решения! Microsoft SQL Server 2005... web дизайн студия... изготовление сайтов; корпоративный сайт... Цена веб-сайта... стильный сайт: ASP! создание web сайтов красиво Cоздание сайтов дешево. : создание сайта: Cоздание сайтов it outsourcing. ... стоимость сайта! сайт недорого: Cоздание сайтов качественно. заказ сайта: Создать сайт; веб-дизайн, разработка сайтов: Разработка... Cоздание сайтов различной сложности; оптимизация Cоздание сайта. ; Cоздание сайтов красиво создание web сайтов дешево.

web-дизайн

. дизайн сайта. : MSSQL

цена бизнес сайта

. раскрутка сайта. : цена и стоимость сайта, Аутсорсинг: разработка сайта... создание web сайтов качественно. цена web-сайта... разработка бизнес сайта .NET. . создание сайта разработка web-дизайна. , сайты дешево: заказать сайт; Cоздание сайтов быстро
IT реальность - наша профессия
 Портфолио 
 Услуги и решения 
 Публикации и статьи 
 Контакты 

заказ сайта! разработка бизнес сайта, создание web сайтов быстро: Разработка сайта. веб-дизайн, разработка сайтов! .NET: Цена веб-сайта. сайт недорого, web-дизайн! web дизайн студия outsourcing. Cоздание сайтов различной сложности.

MSSQL

. , оптимизация, Создать сайт: Cоздание сайтов качественно: цена сайта... разработка сайта: изготовление сайтов, Cоздание сайта, ASP! создание бизнес сайта цена web-сайта. it outsourcing. ! сайты дешево. концепция дизайна: веб решения! C#. создание web сайтов дешево! заказать сайт: ASP.NET, раскрутка сайта; Cоздание сайтов красиво... цена бизнес сайта: стильный сайт. корпоративный сайт. создание web сайтов красиво... Cоздание сайтов быстро... продвижение сайта! Бизнес сайт; создание сайта! стоимость сайта; Аутсорсинг... создание сайта... дизайн сайта; ИТ аутсорсинг: Оптимизация, продвижение сайтов. Microsoft SQL Server 2005! Разработка; цена и стоимость сайта Самые маленькие цены и сроки реализации сайтов. , Cоздание сайтов дешево

разработка сайта

. создание web сайтов качественно. ; создание продвижение сайтов Бизнес сайт. ! разработка web-дизайна. Cоздание сайтов

AJAX - подстановка слов в текстовое поле

Главная страница / Публикации и статьи / Технологии / AJAX - подстановка слов в текстовое поле

Данная статья посвящена созданию возможности подстановки слов в текстовое поле. Использование такой возможности позволит пользователю сэкономить время, необходимо при вводе информации (например: ввести несколько первых букв названия города, и потом в появившемся списке выбрать название нужного города).

Для реализации возможности списка подстановки используется технология ASP.NET 2.0.

Первое, что необходимо – это создать проект веб-приложения. Для этого в Visual Studio 2005 выберите в меню пункт File\New\Web Site. В появившемся окне выберите заготовку ASP.NET Web Site, в местоположении проекта введите, например, «C:\Inetpub\wwwroot\AutoCompleteWords», выберите язык Visual C# и нажмите кнопку OK.

Теперь займемся созданием списка автоматической подстановки, для этого в каталоге App_Data проекта создадим файл Words.txt, в который поместим набор слов, Вы можете поместить в него любые слова, но для примера поместим в него некоторые слова из глоссария .NET SDK:

access control list (ACL)
ADO.NET
aggregate event
alpha channel
anchoring
antialiasing
application base
application domain (AppDomain)
application manifest
application state
ASP.NET
ASP.NET application services database
ASP.NET mobile controls
ASP.NET mobile Web Forms
ASP.NET page
ASP.NET server control
ASP.NET Web application
assembly
assembly cache
assembly manifest
assembly metadata
assertion (Assert)
association class
ASSOCIATORS OF
asynchronous method 
attribute
authentication
authorization
autopostback

После создания файла, содержащего слов для подстановки, создадим саму веб-форму, которая будет содержать текстовое поле с возможностью подстановки. Для этого в файл Default.aspx, который содержится в созданном проекте, поместим следующий код:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="AutoComplete" %>

<!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 id="Head1" runat="server">
    <title>Текствое поле с подстановкой</title>

    <script type="text/javascript">
     function TextKeyDown(WhoSend,WhoGet) //Обработка нажатий кнопок
        {
            var e=event;
            if(e.keyCode==13)
            {
                e.returnValue =false;
                return false;
            }
            else if(e.keyCode==27)
            {
                document.getElementById(WhoGet).style.display='none'
                e.returnValue =false;
            }
        }
        function SendData(WhoSend,WhoGet) //Отправка данных на сервер и 
проверка нажатых клавиш в текстовом поле
        {
            if (WhoSend.value.length<2){return false;}//Ничего не делать, 
если введено меньше 2-х символов
            var objGet=document.getElementById(WhoGet);
            var e=event;
            if (e.keyCode==40) //Нажата стрелка вниз
            {
                if (objGet.selectedIndex<objGet.options.length-1)
                    objGet.selectedIndex++;
                else 
                    objGet.selectedIndex=0;
                return false;
            }else if (e.keyCode==38) //Нажата стрелка вверх
            {
                if (objGet.selectedIndex>0)
                    objGet.selectedIndex--;
                else 
                    objGet.selectedIndex=objGet.options.length-1;
                return false;
            }else if (e.keyCode==13) //Нажат ввод
            {
                ReturnValueToTextBoxs(objGet,WhoSend)
                return false;
            }else if (e.keyCode==27) //Нажат Escape
            {
                objGet.style.display='none';
                return false;
            }
            //Выполнение запроса на сервер и отображение списка подстановки
            var offset=WebForm_GetElementPosition(WhoSend) //Получение 
координат текстового поля
            CallServer(WhoSend.value,WhoGet); //Запрос на сервер
            objGet.style.top =offset.y+WhoSend.offsetHeight+'px';
            objGet.style.left =offset.x+'px';
            objGet.style.width =offset.width+'px';
            objGet.style.display='block'; //Отображение списка на экране

        }
        function ReceiveServerData(args, context) //Поучение данных с сервера
        {
            if (args.length=0){return false;} //Ничего не делаем, если ничего не получено
            var select=document.getElementById(context)
            var mass=args.split("\t"); //Превращаем строку в массив
            for (var i=select.length-1;i>-1;i--) //Очищаем список
                select.options[i]=null;
            for (var i=0;i<mass.length-1;i++)
            {
                select.options[i]=new Option(mass[i]); //Заполняем список
            }
            if (i!=0)
                select.size=i+1; //Выставляем размер с списка

        }        
        function ReturnValueToTextBoxs(SelectObj,TextObj)//Заполняем текстовое поле
        {
            TextObj.value=SelectObj.options[SelectObj.selectedIndex].text;
            TextObj.focus();
            SelectObj.style.display='none';
        }
        function SelectItem(select,textbox,mouse) //Обрабатываем события списка подстановки
        {
            TextObj=document.getElementById(textbox);
            SelectObj=select;
            if (mouse==true)
            {
                
                ReturnValueToTextBoxs(SelectObj,TextObj);
            }
            else
            {
                var e=event;
                if (e.keyCode==13)
                {
                    ReturnValueToTextBoxs(SelectObj,TextObj);
                 
                }
                else if(e.keyCode==27)
                {
                    TextObj.focus();
                    SelectObj.style.display='none';
                }
                
            }
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="TextBox1" runat="server" Width="477px"
AutoCompleteType="Disabled"></asp:TextBox>
            <asp:ListBox ID="Select1" runat="server" Style="position: 
absolute; display: none;">
            </asp:ListBox>
        </div>
    </form>
</body>
</html>


А в файл Default.aspx.cs поместим исходный код обработчика событий веб-формы:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class AutoComplete : System.Web.UI.Page, ICallbackEventHandler
{
    string CallbackResult; //Здесь хранится результат callback
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            RegisterClientScript();
            TextBox1.Attributes.Add("onkeyup",
			String.Format("SendData(this,'{0}');", Select1.ClientID)); //Подключаем 
обработчик нажатия клавиш
            TextBox1.Attributes.Add("onkeydown",
			String.Format("TextKeyDown(this,'{0}',event)", Select1.ClientID)); 
//Обработка нажатия клавиш
            Select1.Attributes.Add("onkeydown",
			String.Format("SelectItem(this,'{0}',false);", TextBox1.ClientID)); 
			//Событие списка
            Select1.Attributes.Add("ondblclick",
			String.Format("SelectItem(this,'{0}',true);", TextBox1.ClientID)); 
			//Событие списка
        }
    }
    /// 
    /// Процедура регистрации клиентских скриптов обратного вызова
    /// 
    private void RegisterClientScript()
    {
        ClientScriptManager m = Page.ClientScript;
        string cbReference = m.GetCallbackEventReference(this, "args", 
"ReceiveServerData", "context");
        string strCallback = "function CallServer(args,context){" +
cbReference + ";}";
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), 
"CallServer", strCallback, true);
    }
    /// 
    /// Функция возвращающая результат callback
    /// 
    public string GetCallbackResult()
    {
        return CallbackResult;
    }
    /// 
    /// Процедура вызываемая клиентским скриптом
    /// 
    public void RaiseCallbackEvent(string eventArgument)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        FileStream file = new
          FileStream(Server.MapPath("~/App_Data/words.txt"), FileMode.Open,
          FileAccess.Read);
        StreamReader reader = new StreamReader(file);
        String word;
        while ((word = reader.ReadLine()) != null)
        {
            if (word.Length >= eventArgument.Length)
                if (eventArgument.ToLower() == word.Substring(0,
 eventArgument.Length).ToLower())
                {
                    sb = sb.Append(word);
                    sb = sb.Append("\t");
                }
        }
        file.Close();
        CallbackResult = sb.ToString();
    }
}


Теперь запустим проект на выполнение. На экране появится веб-страница, содержащая одно единственное текстовое поле.


Введем в него слово as, после этого экран должен принять примерно такой вид:


Для того, чтобы перейти на какое-нибудь слово из списка подстановки, нажимаем стрелку вниз на клавиатуре. Чтобы выбрать слово, нажимаем ввод, также выбор слова можно осуществить двойным щелчком.
В мире много апельсинов,
а такой как этот  -  
только мы!
У нас всегда найдется время связаться с Вами!
Заполните, пожалуйста, форму обратной связи.
Это займет всего 30 секунд времени.
Ваше имя: *
Компания:
E-mail:
Телефон: *
Вопрос: *
Введите код: *
(защита от спама)
Обратите внимание на то, что поля, отмеченные *, обязательны для заполнения.

Пишите:
web-дизайн! сайты дешево; ASP.NET. цена web-сайта: заказ сайта Cоздание сайтов быстро. ... MSSQL: Cоздание сайтов красиво веб-дизайн, разработка сайтов. ; разработка сайта! дизайн сайта. Microsoft SQL Server 2005... Создать сайт! создание web сайтов дешево! разработка web-дизайна разработка бизнес сайта. . оптимизация! C#... ИТ аутсорсинг Разработка. : создание web сайтов быстро: создание web сайтов качественно; корпоративный сайт. создание сайта: Cоздание сайта... outsourcing, Cоздание сайтов качественно: веб решения: Самые маленькие цены и сроки реализации сайтов... продвижение сайта, цена бизнес сайта, Cоздание сайтов! изготовление сайтов. Cоздание сайтов различной сложности, стильный сайт, ASP! цена и стоимость сайта... Cоздание сайтов дешево. создание бизнес сайта, цена сайта... создание продвижение сайтов, стоимость сайта; концепция дизайна: Бизнес сайт... .NET: раскрутка сайта: Разработка сайта, создание сайта. сайт недорого. web дизайн студия... Цена веб-сайта: it outsourcing... Оптимизация, продвижение сайтов; Бизнес сайт... заказать сайт; разработка сайта... создание web сайтов красиво. Аутсорсинг
веб решения: сайт недорого! стоимость сайта, создание сайта, Оптимизация, продвижение сайтов. цена web-сайта. дизайн сайта: web-дизайн, сайты дешево; Аутсорсинг! Разработка создание бизнес сайта. ; .NET; стильный сайт! Самые маленькие цены и сроки реализации сайтов... ASP: Cоздание сайтов дешево

продвижение сайта

. . концепция дизайна. цена сайта, веб-дизайн, разработка сайтов! изготовление сайтов

Разработка сайта

. ; заказать сайт раскрутка сайта. . Бизнес сайт; Cоздание сайтов, Создать сайт, цена бизнес сайта; Cоздание сайтов быстро. web дизайн студия; разработка сайта! Cоздание сайтов качественно. Cоздание сайта... Бизнес сайт; создание web сайтов красиво

Цена веб-сайта

. . ASP.NET; разработка web-дизайна: корпоративный сайт... разработка бизнес сайта. ИТ аутсорсинг

создание web сайтов дешево

. создание продвижение сайтов. Cоздание сайтов красиво. ; заказ сайта; цена и стоимость сайта... создание сайта outsourcing. ... Cоздание сайтов различной сложности. оптимизация it outsourcing. ; MSSQL: создание web сайтов качественно Microsoft SQL Server 2005. ! создание web сайтов быстро: C#... разработка сайта