AJAX Control Toolkit Расширение автозаполнения не работает - PullRequest
1 голос
/ 06 марта 2011

Я не могу заставить работать автозаполнение AJAX CT. Проблема в том, что когда я начинаю писать в текстовом поле, ничего не происходит. Первая проблема, с которой я столкнулся, заключалась в том, что при попытке добавить метод страницы автозаполнения я получил ошибку: «Невозможно создать метод страницы« GetCompletionList »...» ». Затем я попытался создать его вручную, но все равно ничего не происходит.

Вот код AdministracijaOsoba.aspx:

<asp:TextBox ID="txtOsoba" runat="server"></asp:TextBox><asp:AutoCompleteExtender
                    ID="AutoCompleteExtender1" runat="server" ScriptPath="" 
                    ServiceMethod="GetCompletionList" ServicePath="AdministracijaOsoba.aspx.cs" 
                    TargetControlID="txtOsoba" UseContextKey="True">
                </asp:AutoCompleteExtender>

Вот код AdministracijaOsoba.aspx.cs:

public static string[] GetCompletionList(string prefixText, int count, string contextKey)
    {
        PravosudnaAkademijaEntities db = new PravosudnaAkademijaEntities();

        var osoba = from o in db.osobas
                    orderby o.osoba_prezime
                    select new { o.osoba_id, person = o.osoba_prezime + " " + o.osoba_ime };

        string[] main = new string[0];

        foreach (var o in osoba)
        {
            if (o.person.StartsWith(prefixText))
            {
                Array.Resize(ref main, main.Length + 1);
                main[main.Length - 1] = o.person.ToString();

                if (main.Length == 15)
                {
                    break;
                }
            }
        }

        Array.Sort(main);
        return main;
    }

Обратите внимание, что я использую LINQ to Entities. Буду признателен за любую помощь в этом.

Привет!

Ответы [ 9 ]

2 голосов
/ 12 июня 2011

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

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

Также нет необходимости предоставлять атрибут servicepath для вашего расширителя ajax, если вы используете метод pagescript.

1 голос
/ 23 июня 2011

У меня тоже была такая же проблема.Я знаю, что это немного поздно, но лучше поздно, чем никогда ...

Вот настройка, которая наконец сработала для меня (с вашими идентификаторами и именами на месте):

Code-Behind (aspx.cs):

    [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethod()]
    public static string[] GetCompletionList(string prefixText, int count, string contextKey)
    {
        ...
    } 

Код (.aspx):

    <asp:TextBox ID="txtOsoba" runat="server"></asp:TextBox>
    <asp:AutoCompleteExtender ID="AutoCompleteExtender1" 
        runat="server"
        ServiceMethod="GetCompletionList"
        TargetControlID="txtOsoba"  
        UseContextKey="True">
    </asp:AutoCompleteExtender>

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

Путь к веб-службе, из которой расширитель будет извлекать завершения слова \ предложения.Если это не предусмотрено, метод обслуживания должен быть методом страницы .

, что объясняется на странице справки по автозаполнению .У вас есть метод GetCompletionList (), определенный в вашем Code-Behind, который, как я полагаю, в настоящее время квалифицируется как «метод страницы».Так что, похоже, вы бы использовали свойства Path, только если бы у нас был метод в другом месте, например, services.cs или что-то в этом роде.

1 голос
/ 01 апреля 2011

Ваш код почти верен.Единственная проблема заключается в том, что путь службы не должен заканчиваться на .aspx.cs, а только на .aspxЕсли расширитель находится на той же странице, что и метод, не указывайте servicepath

1 голос
/ 16 марта 2011

Вот что у меня на странице aspx:

<asp:AutoCompleteExtender ID="tbSearchName_AutoCompleteExtender" runat="server" 
  DelimiterCharacters="" Enabled="True" ServicePath="" 
  TargetControlID="tbSearchName" ServiceMethod="GetCompletionList" 
  UseContextKey="True" MinimumPrefixLength="2">
</asp:AutoCompleteExtender>

В моем коде за страницей у меня есть:

[System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
public static string[] GetCompletionList(string prefixText, int count, string contextKey)
{
  ArrayList testList = new ArrayList();
  ...
  return (string[])testList.ToArray(typeof(string));
}
1 голос
/ 06 марта 2011

Измените вашу декларацию на:

<asp:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" 
    ServiceMethod="GetCompletionList" 
    ServicePath="AdministracijaOsoba.aspx/GetCompletionList" 
    TargetControlID="txtOsoba" UseContextKey="True">

Добавьте это к своему коду AdministracijaOsoba.aspx.cs:

[WebMethod]
public static string[] GetCompletionList(string prefixText, int count, string contextKey)
{
  ...
}
0 голосов
/ 25 июня 2015

Ajax autocomplete использует вызов службы, поэтому вы можете использовать приведенный ниже код в файле aspx.cs. Обратите внимание на атрибут System.Web.Services.WebMethodAttribute(), это сделает метод доступным для вызова службы.

В качестве альтернативы вы можетеиспользуйте любой сервис ASMX или сервис WCF для расширенного и надежного использования сервиса.

[System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
public static List<string> GetCompletionList(string prefixText, int count, string contextKey)
{
    return UserControls_phonenumbersearch.GetCompletionList(prefixText, count, contextKey);
}
0 голосов
/ 11 марта 2014

Установить свойство автоматической обратной передачи TextBox на TRUE

0 голосов
/ 13 апреля 2012

Возможно, вам не хватает указания MinimumPrefixLength параметра AutoCompleteExtender .

0 голосов
/ 07 мая 2011

удалите ключевое слово static в объявлении вашего метода.

...