Установите значение SELECT после заполнения его jQuery

0

Я пытаюсь заполнить SELECT с помощью jQuery, и после того, как он заполнит, установите значение, которое я хочу. Я работаю с ASP.NET MVC 5.

Проблема заключается в том, что значение не устанавливается

Вот мой код:

$(document).ready(function () {
    //DropDownLists Initialization
    ListCategories(); //Populates the dropdownlist
    PreviousCategory(); //Sets DropDownList value to previous state (posted value)
});
function PreviousCategory() {
    var previousCategory = $("#PreviousCategory").val();
    if (previousCategory != null && previousCategory != '') {
        $("#IdCategory").val(previousCategory);
    }
}

$ ("# PreviousCategory") - это скрытый ввод, который получает значение на стороне сервера после обратной передачи с помощью следующего кода:

@if (ViewBag.Category!=null)
{
    @Html.Hidden("PreviousCategory",(object)ViewBag.Category);
}

Обе функции работают раздельно, DropDownList получает заселение безупречно, но значение не устанавливается. Если я вызываю PreviousCategory() из другого события (например, нажатие кнопки), значение устанавливается отлично.

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

РЕДАКТИРОВАТЬ:

Вот список ListCategories():

function ListCategories(){
    _idOrganigrama = $("#IdOrganigrama").val()
    _idTipoPedido = $("#IdTipoPedido").val()
    data = { idOrganigrama: _idOrganigrama, idTipoPedido: _idTipoPedido }
    $.post("ListCategories/", data, function (categoryList) {
        $("#IdCategoria").empty();
        $(categoryList).each(function () {
            $("<option />", {
                val: this.Id,
                text: this.Descripcion
            }).appendTo($("#IdCategory"));
        });
    });
}

Кстати... $ ("# IdCategory") - это выбор.

  • 0
    Не могли бы вы опубликовать содержимое ListCategories ()? Или это, или отрендеренный HTML- #idCategoria
  • 0
    1. Добавьте отладку и проверьте значение предыдущей категории в предыдущей категории. 2. Вы уверены, что предыдущая категория существует в списке категорий?
Показать ещё 4 комментария
Теги:
asp.net-mvc

1 ответ

1
Лучший ответ

Проблема, похоже, в ListCategories где вы можете использовать async-функцию, такую как ajax, для извлечения данных с сервера и заполнения выбранного.

Поэтому используйте решение на основе обратного вызова, подобное этому

$(document).ready(function () {
    //DropDownLists Initialization
    ListCategories(PreviousCategory); //Populates the dropdownlist
    //Sets DropDownList value to previous state (posted value) after the values are loaded
});

function PreviousCategory() {
    var previousCategory = $("#PreviousCategory").val();
    if (previousCategory != null && previousCategory != '') {
        $("#IdCategoria").val(previousCategory);
    }
}

function ListCategories(callback) {
    //your ajax request to populate the select
    $.ajax({}).done(function () {
        //populate the select

        //then at the last call the callback method which will set the value
        callback()
    })
};
  • 0
    Я попробую это, спасибо.
  • 0
    Это сработало отлично, большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню