用jQuery填充后设置SELECT值

时间:2013-12-16 03:55:22

标签: c# javascript jquery asp.net-mvc

我正在尝试使用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”)是选择。

1 个答案:

答案 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()
    })
};