listbox.Items.Count在代码中等于零

时间:2015-04-19 09:49:06

标签: c# jquery asp.net listbox

我的aspx页面中有两个列表框,我称之为ListBox1和ListBox2。

我在pageload中设置了ListBox1的数据源,但ListBox2为空。

protected void btnSubmit_Click(object sender, EventArgs e)
    {
        for (int count = 0; count <= Convert.ToInt32(lbright.Items.Count); count++)
        {
            string str = null;
            string[] strArr = null;
            int count2 = 0;
            str = lbright.Items[count].ToString();
            char[] splitchar = { ';' };
            strArr = str.Split(splitchar);
            for (count2 = 0; count2 <= strArr.Length - 1; count++)
            {
                Response.Write(
                    "Option" + count + ":<br />" +
                    "   " + "Value" + count2 + ":" + strArr[count]
                    );
            }
        }
    }

用户可以双击ListBox1中的项目将它们添加到ListBox2.I已经在JQuery中编写了这段代码。在这部分中一切正常。

<script type="text/javascript">
$(document).ready(function () {
    $('#lbleft').on('dblclick', 'option', function () {
        var element = $("#lbleft option:selected");
        var value = element.val();
        var text = element.text();
        element.remove();

        $("#lbright").append('<option value="' + value + '">' + text + '</option>');
    });
    $('#lbright').on('dblclick', 'option', function () {
        var element = $("#lbright option:selected");
        var value = element.val();
        var text = element.text();
        element.remove();

        $("#lbleft").append('<option value="' + value + '">' + text + '</option>');
    });
});

问题是当我想从ListBox2中读取项目时 我的页面中有一个按钮,用户可以通过单击此按钮保存ListBox2的项目。但是ListBox2的项目数在代码隐藏中为零。

1 个答案:

答案 0 :(得分:2)

由于您使用JS向客户端的第二个ListBox添加项目,因此无法将这些值添加到viewstate,这就是使用lbright.Items在服务器端无法使用这些值的原因。 Asp.net依赖于viewstate来获取这些值,如果在服务器端设置了这些值,它将可用。

要使其正常运行,您可以使用Request.Form["lbright"].ToString()将这些附加值添加到第二个列表框中。如果最终用户选择了这些值,例如点击每个选项 - 为什么?因为如果选择我们将发布到服务器的那些,对于多个选项,它将给出逗号分隔值。

但如果最终用户没有选择它们,则上述建议将无效。要解决这个问题,你需要设置一个隐藏字段(向隐藏字段添加新值并附加休息)并使用相同的东西Request.Form["hdnField"].ToString()来获取它,这里的优点是,它独立于最终用户选择的项目右边框。