我正在尝试使用jQuery填充SELECT,并在填充后设置我想要的值。 我正在使用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 :(得分:1)
问题似乎出现在ListCategories
,您可能正在使用像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()
})
};