select2 возвращает позицию элементов, а не идентификатор элементов

#javascript #asp.net-mvc #jquery-select2

#javascript #asp.net-mvc #jquery-select2

Вопрос:

Я использую select2, чтобы позволить пользователю выбирать несколько параметров. Все работает нормально, за исключением одной неприятной проблемы.

В первый раз, когда я нажимаю кнопку сохранить, чтобы сохранить элементы, это работает. Но затем при последующих вызовах идентификатор элементов заменяется положением элементов. Например, если у меня выбраны идентификаторы 3, 6 и 10, первое сохранение сработает, и 3,6,10 будут переданы контроллеру.

Но затем, если я перезагружу представление и нажму сохранить, будут переданы числа 0,1,2 (т. Е. Их относительные позиции при выборе).

Вот код:

Во-первых, HTML:

 <select id="selectGroup" class="form-control" multiple="true">
  

В $(document).готово:

     // Load Groups
    $("#selectGroup").select2({ placeholder: 'Select' });
    $.ajax({
        url: ROOT_URL   "Group/GroupList",
        type: "GET",
        success: function (data) {

            let dropdown = $('#selectGroup');
            dropdown.empty();
            dropdown.append($('<option></option>').attr('value', 0).text("(Select)"));
            $.each(JSON.parse(data), function (key, entry) {
                dropdown.append($('<option></option>').attr('value', entry.GroupID).text(entry.GroupName));
            })

        },
        error: function (passParams) {
            Notify(passParams, "Unexpected Error Loading Groups", "error");
        }
    });
  

И, наконец, js для сохранения (вызывается с кнопки, которая передается в loanID):

 function LoanGroupSave(loanID) {

    var grpIDs = '';
    [].forEach.call(document.querySelectorAll('#selectGroup :checked'), function (elm) {
        grpIDs  = elm.value   ',';
    })

    var editURL = location.protocol   '//'   location.host   "/Loan/LoanGroupSave";
    //alert(editURL);

    var obj = { "LoanID": loanID, "GroupIDs": grpIDs };

    alert(JSON.stringify(obj));

    $.ajax({
        type: "POST",
        url: editURL,
        data: JSON.stringify(obj),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
    }).done(function (response) {
        if (response.success) {
            Notify("Group(s) information has been saved", "Saved", "success", false, "toast-top-right", 5000);
        }
        else {
            OpenPopupGeneral("Error(s)", response.message);
        }
    }).fail(function (jqXHR, textStatus, errorThrown) {
        OpenPopupGeneral("Unexpected Error(s)", "Error = "   errorThrown);
    });

}
  

Ответ №1:

Публикация для людей, которые совершают ту же ошибку.

Проблема была в моей загрузке — мне нужно было добавить groupId в качестве ключа, а не номер строки, который был в значении ключевого параметра:

         success: function (data) {
            $.each(JSON.parse(data), function (key, entry) {
                var $newOption = $("<option selected='selected'></option>").val(entry.GroupID).text(entry.GroupName);
                $("#selectGroup").append($newOption).trigger('change');
            }