Автозаполнение расширителя в текстовом поле без использования веб-службы - PullRequest
3 голосов
/ 11 марта 2010

Я не хочу использовать веб-сервис для заполнения расширителя автозаполнения в текстовом поле.В этом случае пользователь вводит название страны, и я не хочу совершать поездку в базу данных каждый раз.Я бы предпочел сохранить коллекцию в состоянии сеанса и «привязать» к ней автозаполнение.

Возможно ли установить ServicePath и / или ServiceMethod для чего-либо в коде, а не веб-службы?

С уважением, Кумар

Ответы [ 4 ]

1 голос
/ 11 марта 2010

К сожалению, нет прямой возможности сделать это, кроме как взломать javascript, чтобы остановить браузер от вызова для получения списка.

Единственный другой вариант, который я вижу, - это создать веб-сервис и использовать EnableCaching свойство AutoCompleteExtender, чтобы убедиться, что результат веб-сервиса кэшируется на клиенте, тем самым избегая обращений к веб-сервису (и базе данных по очереди ).

РЕДАКТИРОВАТЬ: Подумав еще раз, я думаю, что можно пометить публичный статический метод на вашей странице с атрибутом WebMethod и установить ServicePath для вашей страницы aspx.

посмотрим, поможет ли это - http://blogs.msdn.com/sburke/archive/2006/10/21/hint-components-that-use-web-services-with-asp-net-ajax-v1-0-beta.aspx

Я думаю, это должно работать. Но я не уверен, если фреймворк требует, чтобы это был веб-сервис.

0 голосов
/ 04 мая 2010

вы можете установить атрибут onclientpopulation для вашей локальной функции javascript, например, onclientpopulation = "onPopulation", а затем в этой функции js предоставлять локальные данные вместо попадания в веб-службу. ниже одна из реализаций, которую я использовал, которая никогда не попадает в веб-сервис. Переменная completeData содержит все данные, через которые итерируется, чтобы найти соответствие на основе того, что пользователь ввел в текстовое поле. Это старый пример. я бы, наверное, сделал бы это немного иначе, если бы реализовал это сейчас.

    function onPopulating(ace, args)
    {
       var prefixText = ace._currentCompletionWord();
       var filteredItems = GetFilteredItems(prefixText);
       ace._update(prefixText,filteredItems,false);
       args.set_cancel(true);

    }

    function GetFilteredItems(prefixText)
    {
        var filteredItems = []; 
        for (var nCount=0; nCount < completionData.length; nCount ++)
        {
            if (completionData[nCount].startsWith(prefixText))
            {
                Array.add(filteredItems,completionData[nCount]);

            }
        }
        return filteredItems; 
    }
0 голосов
/ 11 марта 2010

Вы можете использовать локальный файл asmx внутри существующего веб-проекта и подключиться к нему. Здесь вы можете поместить любую логику, которая вам нужна, чтобы вам не пришлось обращаться к базе данных, если вы этого не хотите. Это действительно как другая веб-страница, у которой не должно быть проблем с доступом к состоянию сеанса.

0 голосов
/ 11 марта 2010

Ваш список стран меняется или меняется в зависимости от пользователя? Кажется, не имеет смысла переводить это в состояние сеанса. Я не понимаю, почему вы должны подключиться к серверу для этого.

Рассмотрите возможность рендеринга всех ваших значений непосредственно в HTML, а затем используйте Javascript для автозаполнения полностью на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...