C# 使用多选列表框时不显示附加项

C# 使用多选列表框时不显示附加项,c#,jquery,listbox,C#,Jquery,Listbox,当不包含第二个脚本时,附加的项可以完美地工作,这使列表框看起来很光滑,并且带有复选框——但是当我包含它时,它就不会附加项 有什么原因吗 JQuery: $("#ddlistcategory").change(function () { var catItem = $("#ddlistcategory").val(); $("#ddlistaccountitems").empty(); $.ajax({ url: '

当不包含第二个脚本时,附加的项可以完美地工作,这使列表框看起来很光滑,并且带有复选框——但是当我包含它时,它就不会附加项

有什么原因吗

JQuery:

$("#ddlistcategory").change(function () {
        var catItem = $("#ddlistcategory").val();

        $("#ddlistaccountitems").empty();
        $.ajax({
                url: '@Url.Action("GetCategories", "Account")',
                dataType: "json",
                type: "Post",
                data: { "i": catItem },
                success: function (data) {

                    $.each(data, function (key, val) {
                        //alert(key + " " + val);
                        $("#ddlistaccountitems").append('<option id="' + key + '">' + val + '</option>');
                    })
                }
            });
        });

$('#ddlistaccountitems').multiselect({
    includeSelectAllOption: false,
    allSelectedText: 'No option left ...',
    enableFiltering: true,
    filterPlaceholder: 'Search for something...'
});
视图:


您在ajax方法之外调用multiselect,该方法使用选项填充元素。因此,您将在ajax完成之前对其进行初始化,因此问题很可能是初始化还没有从中构建的选项


要解决此问题,请将初始化移到success方法中,这样它将在ajax完成并创建它所需的所有数据后执行。

您的ajax调用将异步工作。也就是说,.multiselect将在附加选项之前执行。multiselect将隐藏您的实际选择,并将其替换为自定义html。所以你必须先填好它。多选执行。加

async: false
在Ajax中调用或调用

$'ddlistaccountitems'。多选


在成功的功能中

您应该避免async:false。它与范式背道而驰,在jQuery3.XYes中也被删除了。。这不是一个最优的解决方案。最好将multiselect移到success函数。
async: false