Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает AutoCompleteExtender, из AjaxControlToolkit 
:(
    Опции темы
Martin_8
Дата 11.1.2010, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 16.10.2006
Где: Минск

Репутация: нет
Всего: нет



Здравствуйте. 
У меня почему-то не работает элементом управления AutoCompleteExtender. Хотя я, как мне кажется, написал все правильно. Помогите пожалуйста разобраться.

Страница с разметкой выглядит так:

Код

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="logout.aspx.cs" Inherits="Statement.logout" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxTool" %>

<form id="form1" runat="server">
    <ajaxTool:ToolkitScriptManager ID="toolsm" runat="server">
        <Services >
          <asp:ServiceReference Path ="~/AutoComplete.asmx" />
        </Services>
    </ajaxTool:ToolkitScriptManager>

...  
        <asp:TextBox ID="txt" runat="server"></asp:TextBox>
        <ajaxTool:AutoCompleteExtender id="aceTitle" runat ="server" 
            TargetControlID ="txt" 
            ServicePath="AutoComplete.asmx"
            ServiceMethod ="GetName" 
            MinimumPrefixLength ="1" >
        </ajaxTool:AutoCompleteExtender>
...  


Сам Ajax на странице работает, я это проверил при помощи компонента CalendarExtender. Он полностью работает.
Сама Web-служба выглядит следующим образом:

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Configuration;
using System.Data.SqlClient;

namespace Statement
{
    /// <summary>
    /// Summary description for AutoComplete
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    
    [System.Web.Script.Services.ScriptService]
    
    public class AutoComplete : System.Web.Services.WebService
    {
        [System.Web.Script.Services.ScriptMethod] 
        [System.Web.Services.WebMethod()]

        public static List<string> GetName(string prefixText, int count)
        {
            List<string> names = null;

            // если списка с выражениями нет в кэше
            if (HttpContext.Current.Cache["NameList"] == null)
            {
                // заносим список выражений в кэш
                names = GetNameListFromDB();
                // Список с выражениями кэшируется на 60 минут, для увеличения скорости работы
                HttpContext.Current.Cache.Insert("NameList", names, null, DateTime.Now.AddMinutes(60), TimeSpan.Zero);
            }
            else // список с выражениями есть в кэше
            {
                // Получаем список выражения из кэша
                names = (List<string>)HttpContext.Current.Cache["NameList"];
            }

            int index = -1;
            for (int i = 0; i < names.Count; i++)
            {
                // Check if this is a suitable match
                if (names[i].StartsWith(prefixText, StringComparison.InvariantCultureIgnoreCase))
                {
                    index = i;
                    break;
                }
                // Остнавливаемся если поиск переходит к следующей букве (чтобы повысить производительность)
                if (String.Compare(names[0], prefixText) == 1) break; 
            }

            // Останавливаемся, если соответствие не найдено
            if (index == -1) return new List<string>();

            // Поиск начинается с номера позиции index и продолжается по списку, пытаясбь получить 10 соответствий. 
            // Но, если достигнут конец списка или найдены значения не соответствующие префиксу – поиск прекращается
            List<string> wordList = new List<string>();
            for (int i = index; i < (index + count); i++)
            {
                // Прекратить по достижении конца списка
                if (i >= names.Count) break;

                // Останавливаемся при несоответствии name 
                if (!names[i].StartsWith(prefixText, StringComparison.InvariantCultureIgnoreCase)) break;

                wordList.Add(names[i]);
            }
            return wordList;
        }


        private static List<string> GetNameListFromDB()
        {
            string connectionString = WebConfigurationManager.ConnectionStrings["StatementConnectionString"].ConnectionString;
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand("Select Name From Expressions Order By Name", con);

            List<string> names = new List<string>();

            try
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    names.Add((string)reader["Name"]);
                }
                reader.Close();

                return names;
            }
            finally
            {
                con.Close();
            }
        }
    }
}


Компиляция проходит успешно. Ошибок нет. При вводе текста в TextBox ничего не происходит (т.е. никаких вариантов для выбора не появляется).

Для того, чтобы понять в чём дело и увидеть какие запросы идут на сервер, я воспользовался плагином httpFox для Firefox. 
C его помощью я заметил, что при запросе web-службы (при этом используется URL вида http://localhost:64559/AutoComplete.asmx/GetName ) возникает ошибка. 

Текст ошибки такой:
Ошибка сервера в приложении '/'
Неизвестный веб-метод GetName.
Имя параметра: methodName

Я зашёл в тупик. Помогите пожалуйста понять, что я сделал неправильно. Что не так с методом GetName ? Где ошибка в моём коде ?

Это сообщение отредактировал(а) Martin_8 - 11.1.2010, 01:05
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0723 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.