2008-11-23 6 views
2

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

Вот мой код: (отрывок из моей страницы ASPX)

<asp:TextBox ID="TextBox1" Width="120px" runat="server"></asp:TextBox> 
    <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="TextBox1" ServiceMethod="GetCompletionList" ServicePath="SearchAutoComplete.asmx" MinimumPrefixLength="1"> 
    </cc1:AutoCompleteExtender> 

Мой Webservice код:

[WebMethod] 
    public static string[] GetCompletionList(string prefixText, int count) 
    { 
     List<string> returnData = new List<string>(); 
     MySqlConnection con = new MySqlConnection(Connection.ConnectionString()); 
     string sql = "select title from blog where title like '%" + prefixText + "%'"; 
     MySqlCommand cmd = new MySqlCommand(sql, con); 
     con.Open(); 
     MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
     while (reader.Read()) 
     { 
      returnData.Add(reader["title"].ToString()); 
     } 
     return returnData.ToArray(); 
    } 
+0

Чуть более подробную информацию о режиме отказа может помочь. Возвращает ли он пустой массив? Вызывают ошибку? Неправильные результаты? – 2008-11-23 10:03:50

ответ

2

Как устранить это:

закомментировать код SQL. Просто верните массив с некоторыми тестовыми данными. Это работает? Вы видите это? Если нет, ваш код webservice не будет вызван. Если это работает, ваша проблема связана с кодом вашей базы данных .... Является ли ваш код webservice на вызывающей странице?

1

Я думаю, что ваша проблема в том, что GetCompletionList способ заявлен static.

Если вы запускаете только код .asmx в сеансе отладчика (или просматриваете файл .asmx, если вы развернули свой код на веб-сервере), вы должны увидеть список доступных операций для веб-службы. Когда я изменяю код в примерах инструментальных средств управления Ajax, чтобы объявить этот метод статичным, операция больше не входит в список, и расширитель автозаполнения также перестает работать.

Изменить метод подписи:

public string[] GetCompletionList(string prefixText, int count) 
2

Как метод GetCompletionList быть неправильно объявлен как static, он должен иметь два атрибута; [System.Web.Services.WebMethod] и [System.Web.Script.Services.ScriptMethod]

Так что ваше заявление должно выглядеть следующим образом:

[System.Web.Services.WebMethod] 
[System.Web.Script.Services.ScriptMethod] 
public string[] GetCompletionList(string prefixText, int count) { ... 

Кроме того, ваш класс обслуживания должен иметь следующие атрибуты:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[System.Web.Script.Services.ScriptService] 

автозаполнения расширитель также по всей видимости, сломаны, если ваш GetCompletionList метод вызывает исключение. Чтобы защититься от этого, вы должны добавить try..catch блок вокруг кода функции

[System.Web.Services.WebMethod] 
[System.Web.Script.Services.ScriptMethod] 
public string[] GetCompletionList(string prefixText, int count) 
{ 
    List<string> returnData = new List<string>(); 

    try 
    { 
     // database access code that sets returnData 
    } 
    catch (Exception ex) 
    { 
     // log the exception 
    } 

    return returnData.ToArray(); 
} 
1

Добавить ссылку на ваш веб-службы в ScriptManager, как это

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
<Services> 
<asp:ServiceReference Path="AutoComplete.asmx" /> 
</Services> 
</asp:ScriptManager> 

см ссылку ниже для получения дополнительной информации

Ajax AutoComplete textbox in gridview

1

Прежде всего, вы удаляете «статические» из своего объявления веб-метода. Во-вторых, это добавить EnableCaching = "истинный" CompletionSetCount = "20" в вашем блоке кода

 <cc1:AutoCompleteExtender 

     </cc1:AutoCompleteExtender> 

. Надеюсь, что это решит вашу проблему.

1

При создании WebService, наверху есть линия, которая говорит:

'Чтобы разрешить этот веб-службы, чтобы вызвать из сценария, используя ASP.NET AJAX , раскомментируйте следующую строку.

'<System.Web.Script.Services.ScriptService()> _ 
<WebService(Namespace:="http://tempuri.org/")> _ 
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ 
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ 

Просто раскомментируйте строку:

<System.Web.Script.Services.ScriptService()> _ 

Это случилось со мной в Visual Studio 2010.

Смежные вопросы