将ListItem添加到会话

时间:2018-04-05 20:21:20

标签: vb.net visual-studio-2015

Stackflow上有关于如何将ListBox项添加到会话然后将项重新填充回ListBox的示例,但由于某种原因它无法正常工作。

这是代码段

Private Sub btnSelect_Click(sender As Object, e As EventArgs) Handles btnSelect.Click

    If lstFields.SelectedIndex >= 0 Then

        For i As Integer = 0 To lstFields.Items.Count - 1
            If lstFields.Items(i).Selected Then
                If Not arrayFields.Contains(lstFields.Items(i)) Then
                    arrayFields.Add(lstFields.Items(i))
                    Session("items") = arrayFields
                End If
            End If
        Next

        For i As Integer = 0 To arrayFields.Count - 1
            If Not lstSelected.Items.Contains((CType(arrayFields(i), ListItem))) Then
                lstSelected.Items.Add((CType(arrayFields(i), ListItem)))
            End If

            lstFields.Items.Remove((CType(arrayFields(i), ListItem)))
        Next

        lstSelected.SelectedIndex = -1        

End Sub

当我尝试使用For Each循环将项目重新填充回ListBox时,我不断使用VS 2015的错误显示:

FocusVB.dll中出现'System.InvalidCastException'类型的异常,但未在用户代码中处理

其他信息:无法将“System.Web.UI.WebControls.ListBox”类型的对象强制转换为“System.Collections.IEnumerable”。

以下是每个循环的片段:

For Each item As ListItem In Session("item")
   lstSelected.Items.Add(New ListItem(item.Text, item.Value))
Next

我错过了代码中的某个地方吗?

2 个答案:

答案 0 :(得分:1)

只需从第ListItem

中删除For each item as listitem即可
 For Each item In Session("item")

lstSelected.Items.Add(New ListItem(item.Text,item.Value))     下一步

不要问我为什么,而是阅读this。看看它的命名空间,它会回答你(如果你不是在谈论System.Windows.Documents.listItem

答案 1 :(得分:1)

您的枚举列表包含会话("项目")= arrayFields

但是,您的参考是项目,而不是项目。更改为项目。

If Not  Session("items") Is Nothing Then
    For Each item As ListItem In Session("items")
        lstSelected.Items.Add(New ListItem(item.Text, item.Value))
    Next
End If