Получение результатов AJAX из ASP.Сетевой сервис для управления select2

#c# #jquery #asp.net #jquery-select2

#c# #jquery #asp.net #jquery-select2

Вопрос:

Я пытаюсь реализовать управление Select2, извлекая информацию из ASP.Net Веб-сервис (webforms). Я установил точку останова в коде моего сервера, и метод вызывается и возвращает информацию, но элемент управления select2 никогда не отображает информацию, и никаких ошибок консоли не сообщается (только тот факт, что служба была запущена и возвращена). Вот вся информация:

Веб-сервис C # (ListVar — это класс, который имеет два строковых свойства: Значение и текст):

 public List<ListVar> SearchUsers(string searchText, string additionalFilter)
{
    return WebUserManager.SearchWebUsers(searchText, Boolean.Parse(additionalFilter));
}
  

JS

 $(document).ready(function () {
    $('#O_M_aclUser_hfMain').select2({
        ajax: {
            cache: true,
            dataType: "json",
            type: "POST",
            url: 'http://localhost:54780/Services/Utilities.asmx/SearchUsers',
            data: function (term, page) {
                return {
                    searchText: term,
                    additionalFilter: $('#O_M_aclUser_hfAddFil').val()
                };
            },
            results: function (data, page) {
                alert('test1');
                return { results: data.d };
            }
        },
        formatResult: FormatResults,
        formatSelection: FormatResults,
        dropdownCssClass: 'autoCompleteSelect2',
        escapeMarkup: function (m) { return m; }
    });
});

function FormatResults(result) {
    var markup = '<div class="AutoCompleteResult" entityValue="'   result.Value   '">';
    markup  = result.Text;
    markup  = '</div>';

    return markup;
}
  

Ответ

 <?xml version="1.0" encoding="utf-8"?>
<ArrayOfListVar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
  <ListVar>
    <Value>1</Value>
    <Text>Miles McGehee</Text>
  </ListVar>
  <ListVar>
    <Value>777</Value>
    <Text>Miles McGehee</Text>
  </ListVar>
</ArrayOfListVar>
  

Почему не вызывается мой метод JS results ajax? (Я никогда не вижу предупреждающего сообщения)
Почему не отображается информация

Комментарии:

1. Ваш ответ — xml, а не json.

2. Предполагается ли, что это должно быть в каком-либо конкретном формате json?

3. Не существует определенного формата json . Это зависит от того, что возвращает ваш метод. В вашем случае это может быть {"ArrayOfListVar":[{"Value":"1","Text":"Miles McGehee"},{"Value":"777","Text":"Miles McGehee"}]}

Ответ №1:

Вам нужно украсить свой метод service, чтобы он отвечал в формате JSON, а не XML

 [WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<ListVar> SearchUsers(string searchText, string additionalFilter)
{
    return WebUserManager.SearchWebUsers(searchText, Boolean.Parse(additionalFilter));
}
  

Существует определенный формат json, который select2 ожидает. Ответом должен быть список id и text значения, подобные этому {"d":[{"id":"1","text":"hello"},{"id":"2","text":"world"}]}