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

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

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

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

. создание сайта. ! стильный сайт

веб решения

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

it outsourcing

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

Cоздание сайтов! Самые маленькие цены и сроки реализации сайтов, Cоздание сайтов быстро... цена и стоимость сайта: Cоздание сайтов различной сложности, Создать сайт! ASP.NET... создание продвижение сайтов, заказать сайт. создание web сайтов дешево веб-дизайн, разработка сайтов. ; разработка бизнес сайта

Cоздание сайтов красиво

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

Разработка

. : дизайн сайта! создание сайта: .NET, Cоздание сайтов дешево! web дизайн студия Cоздание сайта. ... сайт недорого

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

. ; создание сайта! создание web сайтов качественно создание бизнес сайта. : web-дизайн

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

. Разработка сайта. ... Бизнес сайт, it outsourcing! заказ сайта. изготовление сайтов

сайты дешево

. ! ASP

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:
Телефон: *
Вопрос: *
Введите код: *
(защита от спама)
Обратите внимание на то, что поля, отмеченные *, обязательны для заполнения.

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

Microsoft SQL Server 2005

. . цена сайта, создание web сайтов качественно: Разработка. создание web сайтов быстро

стоимость сайта

.

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

. , оптимизация... ASP! создание сайта

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

. ! it outsourcing: Аутсорсинг, корпоративный сайт: цена бизнес сайта стильный сайт. Разработка сайта. ... outsourcing
концепция дизайна! Создать сайт; создание web сайтов быстро, изготовление сайтов! корпоративный сайт: создание web сайтов красиво

раскрутка сайта

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

Бизнес сайт

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

стильный сайт

. . заказать сайт создание сайта.

Cоздание сайтов

.