jquery автозаполнение с List <string>в качестве источника - PullRequest
7 голосов
/ 07 марта 2012

у меня есть имя текстового поля txtEmailList, я предоставил для него список автозаполнения,

 <asp:TextBox runat="server" ID="txtEmailList" CssClass="txtAutoComplete">

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

$('#txtEmailList').autocomplete({
                source: function(request, response) {
// this is the ajax call, which is running successfully
                    var msg = 
Assessments_JqueryAutoComplete.AutoComplete(request.term).value; //(ajaxpro functions)
                    response(msg.d); 
                }

            });

вывод будет выглядеть следующим образом (в firebug он отображается как обычный текст), как я могу прикрепить этот массив к свойству источника. (Я не могу использовать метод $ .ajax, так как мне нужно использовать ajaxpro в качестве служебных правил), поэтому я получаю список массивов из вызова ajax, как мне связать автозаполнение.

["Список 1", "Список 2", "Список 3", "Список 4"]; / * // это выходной ответ от jquery (из firebug)

[AjaxPro.AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
public List<string> AutoComplete(string query)
{
List<string> objLisItmes = new List<string>();
objLisItmes.Add("List 1");
objLisItmes.Add("List 2");
objLisItmes.Add("List 3");
objLisItmes.Add("List 4");
return  objLisItmes;
}

это вывод firebug для заголовков ответа

Cache-Controlno-cache Content-Length40 Content-Typetext / plain; charset = utf-8 DateWed, 07 марта 2012 10:45:37 GMT Истекает-1Pragmano-кэш

Ответы [ 4 ]

5 голосов
/ 07 марта 2012

Вместо возврата списка. Я бы вернул строковый массив как:

[AjaxPro.AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
public string[] AutoComplete(string query)
{
   List<string> objLisItmes = new List<string>();
   objLisItmes.Add("List 1");
   objLisItmes.Add("List 2");
   objLisItmes.Add("List 3");
   objLisItmes.Add("List 4");
   return  objLisItmes.ToArray();
}
2 голосов
/ 13 марта 2012

Вместо использования

$('#txtEmailList')

попробуйте использовать

$('input[id$="txtEmailList"]')

Поскольку вы используете серверный элемент управления TextBox, ваш идентификатор, скорее всего, будет выглядеть как «parentID1_parentID2_txtEmailList».Приведенный выше код будет получать входные данные с идентификатором, который заканчивается на «txtEmailList».

Вот как я делаю это в своем тестовом проекте, и он работает.Конечно, я не использую AjaxPro, поэтому я не уверен, как именно вы это сделаете, но, возможно, это даст вам некоторые идеи.

<script type="text/javascript">
        $(function () {
            var element = $('input[id$="TextBox1"]');

            element.autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: "Default.aspx/GetList",
                        data: "{ 'term': '" + request.term + "' }",
                        dataType: "json",
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        dataFilter: function(data) { return data; },
                        success: function (data) {
                            response($.map(data.d, function (item) {
                                return {
                                    value: item
                                }
                            }))
                        }
                    })
                }
            });
        });
    </script>
1 голос
/ 16 марта 2012

Просто убедитесь, что ваш AJAX-вызов возвращает допустимый формат строки как этот фиктивный пример Сохраните это в переменной. Затем используйте его для определения свойства source следующим образом:

var availableValues = ["List 1","List 2","List 3","List 4"];
// var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value;
$( "#txtEmailList" ).autocomplete({
    source: availableValues
});
1 голос
/ 13 марта 2012

Не должно ли это быть:

$('#txtEmailList').autocomplete({source: function(request, response) {
    // this is the ajax call, which is running successfully
    var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value; //(ajaxpro functions)
    response(msg); 
    }

});

?

Если нет, я бы предложил вам использовать console.log (msg) для анализа объекта ответа, если это возможно.

...