0

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

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

这是自定义表格: 在此处输入图像描述

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

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 类中声明,并且是公共的。这是该列表定义:

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 函数应该使计数和容量增加。但是,这一切都没有发生。相反,它似乎正在替换 0 时的内容。

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

4

1 回答 1

3

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

该代码没有替换index 处的项目0;它正在一个项目添加到一个空列表中。

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

于 2021-11-12T16:03:54.083 回答