C# 在asp.net中持久化多个选定项的列表框

C# 在asp.net中持久化多个选定项的列表框,c#,asp.net,listbox,C#,Asp.net,Listbox,我将列表框的搜索选择条件持久化到另一个名为AreasLb的页面上。可以选择多个区域,我只想将用户选择的列表框项目设置为。selected=true 我认为下面的代码应该可以工作,但它不能,因为列表框中没有被选中的项目 if (s == "Areas") { string[] area = nv[s].Substring(0, (nv[s].Length - 1)).Split(';'); int i

我将列表框的搜索选择条件持久化到另一个名为AreasLb的页面上。可以选择多个区域,我只想将用户选择的列表框项目设置为。selected=true

我认为下面的代码应该可以工作,但它不能,因为列表框中没有被选中的项目

    if (s == "Areas")
            {
                string[] area = nv[s].Substring(0, (nv[s].Length - 1)).Split(';');

                int i = 0;
                foreach (ListItem item in AreasLb.Items)
                {
                    foreach (var s1 in area)
                    {
                        if (s1 == item.Value)
                        {
                            AreasLb.Items[i].Selected = true;                                
                        }
                        continue;
                    }

                    i = i + 1;
                }

                continue;
            }

我对你基于索引的选择有点怀疑——不是说它错了,但我认为可能有更好的方法。我很想使用:

string[] area = nv[s].Substring(0, (nv[s].Length - 1)).Split(';');

foreach (ListItem item in AreasLb.Items)
{
    foreach (var s1 in area)
    {
        if (s1 == item.Value)
        {
            item.Selected = true;                                
        }
    }
}
或者,您可以使用
Items.FindByText
方法,而不是遍历列表项集,该方法可以删除一个
foreach
,并可能给您带来一点性能提升:-):


我想我应该用我找到的最终答案来更新这个问题

我基本上是在接受别人编写的代码,整个节目都有多个Page.DataBind()


重新计算,母版页中只有1个,这似乎解决了问题。

您知道您是否正在访问
区域Lb.Items[i]。Selected=true行?完成这部分代码后,您是否可以检查
AreasLb.Items
并查看数组中的正确项是否设置为true?我正在点击该行,它被选中并设置为true。我有一个好朋友!Page.IsPostback在加载中,因此在加载中不会出错。谢谢,我喜欢第二种解决方案。。但就这个问题而言,我认为每一个版本都应该有效,但没有一个有效。肯定是发生了其他事情导致它不起作用。不知道什么though@N00b您的代码在页面生命周期中出现在哪里?你能多发布一些你周围的代码吗?在检查我们是否发回后,PageLoad中有一个对上面代码的方法调用。该方法在回发时不会被命中。
ListItem foundItem = null;

string[] area = nv[s].Substring(0, (nv[s].Length - 1)).Split(';');

foreach (var s1 in area)
{
    // Search for a ListItem with the text from the array
    foundItem = AreasLb.Items.FindByText(s1);

    if (foundItem == null)
    {
        // We didn't find a matching item
    }
    else
    {
        // We found a matching item so select it
        foundItem.Selected = true;
    }

    foundItem = null;
}