Как я могу заставить мой автозаполненный расширитель работать? - PullRequest
2 голосов
/ 23 ноября 2008

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

Вот мой код: (отрывок из моей страницы 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> 

Код моего веб-сервиса:

 [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();
    }

Ответы [ 6 ]

2 голосов
/ 24 ноября 2008

Так же, как метод 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();
}
2 голосов
/ 23 ноября 2008

Как решить эту проблему:

Закомментируйте ваш код SQL. Просто верните массив с некоторыми тестовыми данными. Это работает? Вы видите это? Если нет, ваш код веб-службы не вызывается. Если это работает, ваша проблема с кодом вашей базы данных .... Код вашей веб-службы на странице вызова?

1 голос
/ 13 июня 2013

Когда вы создаете веб-сервис, вверху есть строка, которая говорит:

'Чтобы разрешить вызов этой веб-службы из сценария с использованием 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.

1 голос
/ 13 января 2012

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

      <cc1:AutoCompleteExtender  

      </cc1:AutoCompleteExtender> 

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

1 голос
/ 01 июля 2009

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

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

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

Текстовое поле автозаполнения Ajax в виде сетки

1 голос
/ 23 ноября 2008

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

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

Измените подпись вашего метода на:

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