将 ListItems 添加到会话

Adding ListItems to Session

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 时不断遇到的错误显示:

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

附加信息:无法将类型 'System.Web.UI.WebControls.ListBox' 的对象转换为类型 'System.Collections.IEnumerable'。

这是 for each 循环的片段:

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

我是不是遗漏了代码中的某处?

只需从 For each item as listitem 行删除 ListItem ..

 For Each item In Session("item")

lstSelected.Items.Add(新建列表项(item.Text, item.Value)) 下一个

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

您的枚举列表包含 Session("items") = 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