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

listbox.Items.Count is equal to zero in code

我的 aspx 页面中有两个列表框,我将它们命名为 ListBox1 和 ListBox2。

我在页面加载中设置了 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.Everything 在这部分工作正常。

<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 的项目 button.but ListBox2 的项目数在代码隐藏中为零。

由于您在客户端使用 JS 将项目添加到第二个列表框,它不会将这些值添加到 viewstate ,这就是为什么这些值在服务器端使用 lbright.Items 不可用。 Asp.net 依靠视图状态来获取这些值,如果在服务器端设置这些值,它将可用。

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

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