我在VB.Net中遇到了一个全局变量的问题。
在一个子(由按钮触发)中,我创建对象并将它们存储到全局变量(数组)中。之后我创建了一个表(DataGrid)。
使用第二个按钮触发另一个sub并尝试使用全局变量中的数组,但它似乎是空的。
以下是代码:
<script runat="server">
Dim array_datensatz(12) As Datensatz
Sub submit1_click(ByVal Sender As Object, ByVal E As EventArgs)
Dim cellX As New TableCell()
For n = 0 To 12 '13 objects a created
Dim tmpklasse As New Datensatz(n)
array_datensatz(n) = tmpklasse
' MsgBox(tmpklasse.methode_merkmal1) ' method_merkmal1 returns a Integer
' MsgBox(array_datensatz(n).methode_merkmal1()) 'both work
Next n
ItemsGrid.DataSource = CreateDataSource() 'creates table
ItemsGrid.DataBind()
End Sub
Function CreateDataSource() As ICollection
Dim dt As New DataTable()
Dim dr As DataRow
dt.Columns.Add(New DataColumn("Merkmal1"))
dt.Columns.Add(New DataColumn("Merkmal2"))
dt.Columns.Add(New DataColumn("Merkmal3"))
Dim i As Integer
For i = 0 To (array_datensatz.GetLength(0) - 1) 'länge des array der ergebnise (0. dim) = #results
dr = dt.NewRow()
dr(0) = array_datensatz(i).methode_merkmal1()
dr(1) = array_datensatz(i).methode_merkmal2()
dr(2) = array_datensatz(i).methode_merkmal3()
dt.Rows.Add(dr)
Next i
Dim dv As New DataView(dt)
Return dv
End Function 'CreateDataSource
Public Sub sub_anonym(ByVal Sender As Object, ByVal E As EventArgs)
For i = 0 To (array_datensatz.GetLength(0) - 1)
MsgBox(array_datensatz(i).methode_merkmal1()) 'throws an exception saying that ~"the object reference doesn't target an object-instance"
Next i
End Sub
</script>
有什么问题? 为什么不在数组中的对象?
答案 0 :(得分:2)
这是在一个网站?
如果是这样,用户点击第二个按钮会创建另一个请求。您保存的变量不会保存在请求之间,因此它不再存在(因为它是在第一个请求上设置的,现在已经完成)。要在多个请求中保留这样的值,您需要使用一种存储持续时间更长的方法,例如会话。