【问题标题】:Json to fill Dual ListBoxJson 填充 Dual ListBox
【发布时间】:2016-07-15 09:18:02
【问题描述】:

我正在使用来自http://www.virtuosoft.eu/code/bootstrap-duallistbox/ 的双列表框控件,并尝试使用从 JSON 请求返回的信息填充它。

最初我在 VB 中使用 sub 填充 Duallistbox

Public Shared Sub GenerateDropDownListAndValues(dt As DataTable, ddl As DropDownList, addSelect As Boolean)

    ddl.DataSource = dt
    ddl.DataTextField = dt.Columns(1).ToString()
    ddl.DataValueField = dt.Columns(0).ToString()
    ddl.DataBind()
    If addSelect = True Then
        ddl.Items.Insert(0, New ListItem("Please select"))
    End If

End Sub

然后用 JQuery 使用这个

$('#MainContent_ddlUnassignedFiles').bootstrapDualListbox(
        {
            nonSelectedListLabel: 'Non-selected',
            selectedListLabel: 'Selected',
            preserveSelectionOnMove: 'moved',
            moveOnSelect: true
        });

在页面加载和回发这工作正常,填充没有问题。

但是,当我使用 ajax 填充 DLB 时,我什么也得不到

这是ajax

 $.ajax({
        type: "POST",
        url: "Assignments.aspx/GetIncompleteSpreadsheets",
        data: JSON.stringify(params),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            $("#MainContent_ddlUnassignedFiles").select2("destroy");

            var ddlUnassignedFiles = $("#MainContent_ddlUnassignedFiles");
            ddlUnassignedFiles.empty();
            $.each(data.d, function () {
                ddlUnassignedFiles.append($("<option></option>").val(this['Value']).html(this['Text']));
            });
            $("#MainContent_ddlUnassignedFiles").select2();

            $("#saveModal").modal("hide");

        },
        error: function (data) {
            console.log("error :" + data);
            console.log(data);
            $("#saveModal").modal("hide");
        }
    });

这是提供 json \响应的调用

    <Script.Services.ScriptMethod(), Services.WebMethod()> _
Public Shared Function GetIncompleteSpreadsheets(val As Integer) As List(Of ListItem)
    Dim listOfParam As New List(Of SqlParameter)

    Dim userIdParam As New SqlParameter("@UserId", SqlDbType.VarChar)
    userIdParam.Value = GetUserId()
    listOfParam.Add(userIdParam)

    Dim groupParam As New SqlParameter("@GroupId", SqlDbType.Int)
    groupParam.Value = val
    listOfParam.Add(groupParam)

    Dim dt = GetDataAsDatatable(listOfParam, ConnStr, "App.usp_GetAssignedLists")

    Dim retVal = (From row As Object In dt.Rows Select New ListItem() With {
        .Value = row("RequestHeaderId"),
    .Text = row("FileName")}).ToList()

    Return retVal
End Function

我在这里遇到的问题是,当使用相同的代码填充另一个下拉列表时,这非常有效。但是我遇到的问题是 DLB 没有被填充,但是在页面上创建了另一个下拉列表并且没有填充正确的控件。

非常感谢任何和所有的帮助。

【问题讨论】:

    标签: jquery asp.net json ajax


    【解决方案1】:

    以下内容对我有用:

    HTML:更新

    <select id="test">
        <option>A</option>
        <option>B</option>
    </select>
    

    JS:更新

    $("#test").bootstrapDualListbox();
    
    $.getJSON("/api/Home/").success(function (array) {
        $("#test").children().remove();
        $.each(array, function () {
            $('<option>').text(this).appendTo("#test");
        })
    
        $("#test").bootstrapDualListbox('refresh', true);
    })
    

    我的控制器方法(C#):

    public List<int> Get()
    {
        return new List<int>{1,2,3,4};
    }
    

    结果:

    【讨论】:

    • 我现在得到第一组结果没有问题,但我现在的问题是如果列表需要更改,它不会破坏\重建数据
    • 我更新了答案。选择元素以两个选项(A 和 B)开头。在ajax回调中,这些选项被新选项替换,DLB被刷新。
    • 感谢您的回复,我会尽快再试一次。
    • 对不起,没有机会尝试,停电了,然后不得不在办公室恢复一些系统,然后忘记了。现在将尝试并返回给您
    • 是的,我错过了刷新。
    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多