Здравствуйте. У меня почему-то не работает элементом управления 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
|