List.Add 正在替换索引 0 而不是添加到下一个位置。为什么?

List.Add is replacing index 0 instead of adding to the next position. Why?

我正在使用 ASP.NET 和 Visual Basic 制作自定义表单,用于填写信息。一旦我单击一个按钮,就会调用一个函数,该函数从该表单中获取位信息,将它们放入一个对象中,然后将该对象添加到一个列表中。这被用于一种排队输入系统,因此表单将被多次编辑和提交。

出于某种原因,它没有在列表的下一个索引位置添加新对象,而是替换了 0 处的任何内容。因此,当时列表中只有一个对象。

这是自定义表单:

这是我的自定义对象,目前位于我的 _Default class 上方:

Public Class QueueItem

    Public Property _TestName As String
    Public Property _ValueID As String
    Public Property _MathOperator As String
    Public Property _ValueInput As Integer

    Public Sub New()
    End Sub

    Public Sub New(ByVal TestName As String, ByVal ValueID As String, ByVal MathOperator As String, ByVal ValueInput As Integer)
        _TestName = TestName
        _ValueID = ValueID
        _MathOperator = MathOperator
        _ValueInput = ValueInput
    End Sub

End Class

列表在我的 Page_Load 函数上方声明,在 _Default class 内,并且是 public。这是列表定义:

Public QueueList As List(Of QueueItem) = New List(Of QueueItem)()

而且,按下“添加到队列”按钮时调用的是:

Protected Sub AddToQueueButton_Click(sender As Object, e As EventArgs) Handles AddToQueueButton.Click

        'Adds a new QueueItem to the QueueList
        'Values pulled from the dropdown lists in the custom form

        QueueList.Add(New QueueItem() With {
            ._TestName = TestName.SelectedValue,
            ._ValueID = ValueID.SelectedValue,
            ._MathOperator = MathOperator.SelectedValue,
            ._ValueInput = ValueInput.Text
        })

        'Below section is for testing

        Dim test1 As String = QueueList(0)._TestName
        Dim test2 As String = QueueList(0)._ValueID
        Dim test3 As String = QueueList(0)._MathOperator
        Dim test4 As String = QueueList(0)._ValueInput

        Dim testmessage As String = test1 + " | " + test2 + " | " + test3 + " | " + test4
        Dim count = QueueList.Count
        Dim capacity = QueueList.Capacity

        Response.Write("<script language='javascript'>alert('" + testmessage + "');</script>")

End Sub

因此,如您所见,我使用了一些测试变量和其他东西来确保它正常工作。每次调用它时,都会将一个对象添加到列表中,我会查看列表的计数和容量,并在警报中显示所有信息。

此警报信息始终从索引 0 读取。因此,无论我将信息添加到列表多少次,0 都应该保持不变,对象应该添加到 1,然后 2 , 等等。对吗?

好吧,每当我提交新信息时 0 都会更改,并且计数或容量都不会增加超过第一个条目。它们总是显示为列表中只有一项。

这是我运行填写队列条目表的两次,末尾有两个不同的数字:

第一个运行:

第二个运行:

因为我总是从索引 0 开始读取,所以最后的数字不应该改变。它应该给我与索引 0 处的对象关联的数字。而且,List.Add 函数应该使计数和容量增加。但是,none 发生了。相反,它似乎正在替换 0 处的内容。

如果有人有任何关于如何解决此问题的提示或可以告诉我可能发生的事情,那将不胜感激。

每次向您的页面发出请求时,都会创建一个新的 class 实例来处理该请求。对于 post-back 请求,可能会加载一些数据 - 例如,字段的值 posted 到服务器,以及存储在 ViewState 中的任何内容。但是存储在页面字段中的数据将不会跨请求保留。

代码不是替换索引0处的项目;它是添加一个项目到一个空列表。

您需要以某种方式在请求之间保留您的列表。您可以将其存储在 Session 中,也可以将其放在 ViewState.