Я пытаюсь заполнить 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") - это выбор.
Проблема, похоже, в 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()
})
};
#idCategoria