jQuery UI MultiSelect Widget:在回发后,仅检查最后选择的元素

时间:2012-03-10 09:17:44

标签: jquery-ui

我正在实现这个JQuery UI multiselect http://www.erichynds.com/jquery/jquery-ui-multiselect-widget/

我已设法在我的asp.net页面中使用它,但由于某些原因在回发后,所选文本仅显示最后检查的元素。

这是我的代码

$("document").ready(function () {

    $("#ListBox1").multiselect({

        noneSelectedText: 'Select',
        selectedList: 200

    });

    $("#ListBox2").multiselect({

        noneSelectedText: 'Select',
        selectedList: 200

    });

    function GetSelectedListBox() {


    var array_of_checked_values = $("#ListBox1").multiselect("getChecked").map(function () {
        return this.value;
    }).get();

    var array_of_checked_values1 = $("#ListBox2").multiselect("getChecked").map(function () {
        return this.value;
    }).get();

    $("#HiddenField1").val(array_of_checked_values);

    $("#HiddenField2").val(array_of_checked_values1);


}

});


<body>
    <form id="form1" runat="server">
    <div style="font:12px Helvetica, arial, sans-serif;">
        <asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
        <asp:ListBox ID="ListBox2" runat="server"></asp:ListBox>
        <asp:HiddenField ID="HiddenField1" runat="server" />
        <asp:HiddenField ID="HiddenField2" runat="server" />
    </div>
    <div>
        <asp:Button ID="btn1" runat="server" Text="Press"  OnClientClick="GetSelectedListBox();" onclick="btn1_Click" />
    </div>
    </form>
</body>

在我的服务器端代码

ListBox2.DataSource = dt;
ListBox2.DataTextField = "Id";
ListBox2.DataValueField = "ListValue";
ListBox2.DataBind();

protected void btn1_Click(object sender, EventArgs e)
{
    Response.Write(HiddenField1.Value);

    Response.Write(HiddenField2.Value);
}

任何想法为什么它只显示最后选择的元素,但有趣的是,HiddenField中的值显示“Value1,Value2,Value3,value21”,而小部件框仅显示值21,并且只有值21被删除为已检入在回发之前检查所有元素的小部件

由于

2 个答案:

答案 0 :(得分:3)

我已经做了一个临时修复,我已经知道这不是最好的解决方案,但它一直有效,直到找到正确的方法。

我为每个选择创建了一个隐藏字段,在提交表单之前,我使用选项值设置了隐藏字段。

所以我可以在控制器上获得这个值。

$('#muestraForm').submit(function() {
$("#hidden_temporal_field").val($("#select_field").val());
return true;
});

答案 1 :(得分:0)

我实际上只是遇到了同样的问题。

尝试使用选择模式为多个的列表框,我的页面中有一个回发,值保留在那里

<asp:ListBox ID="ListBox1" SelectionMode="Multiple" runat="server"></asp:ListBox>

另外,在asp.net上似乎没有一个列表框的SelectedItem * s *只在表单上,​​所以你需要手动完成这样的事情

private String GetSelectedItems(ListBox listbox)
{
    String SelectedValues = "";

    foreach ( ListItem item in listbox.Items)
    {
        if(item.Selected == true)
            SelectedValues = SelectedValues + "," + item.Text ;
    }

    if (SelectedValues.Length > 1)
        SelectedValues = SelectedValues.Remove(0, 1);

    return SelectedValues;
}

这适用于我在每个帖子后留下的值,我可以在代码behing中访问所选值的列表:),让我知道它是否对你有所帮助