我有一个奇怪的问题。我使用了很多会话变量,因此我不必在每次页面进行回发时都来回传递它们。我多年来一直这样做,所以我完全不知所措。
我在 App_Code 文件夹中有一个名为 SessionHandler.vb 的文件,其中包含以下代码:
Imports Microsoft.VisualBasic
Public Class SessionHandler
Private Shared _chgLinePkNum As String = "0"
Private Shared _chgStudentIDPk As String = "0"
Public Shared Property chgLinePkNum() As String
Get
' Check for null first
If (HttpContext.Current.Session(SessionHandler._chgLinePkNum) Is Nothing) Then
' Return an empty string if session variable is null.
Return "Nothing"
Else
Return HttpContext.Current.Session(SessionHandler._chgLinePkNum).ToString()
End If
End Get
Set(ByVal value As String)
If (value Is Nothing) Or (value = "") Then
HttpContext.Current.Session(SessionHandler._chgLinePkNum) = "Nothing"
Else
HttpContext.Current.Session(SessionHandler._chgLinePkNum) = value
End If
End Set
End Property
Public Shared Property chgStudentIDPk() As String
Get
' Check for null first
If (HttpContext.Current.Session(SessionHandler._chgStudentIDPk) Is Nothing) Then
' Return an empty string if session variable is null.
Return "Nothing"
Else
Return HttpContext.Current.Session(SessionHandler._chgStudentIDPk).ToString()
End If
End Get
Set(ByVal value As String)
If (value Is Nothing) Or (value = "") Then
HttpContext.Current.Session(SessionHandler._chgStudentIDPk) = "Nothing"
Else
HttpContext.Current.Session(SessionHandler._chgStudentIDPk) = value
End If
End Set
End Property
很简单......然后,在我的代码中,我引用了 SessionHandler.chgLinePkNum 的属性。此代码块具有 LineItemNumber = 1 和 StudentID = [实际 ID 号]。
If IsParking And checkbox.Checked = True Then
SessionHandler.chgLinePkNum = LineItemNumber
SessionHandler.chgStudentIDPk = StudentID
peParkingRegistration.Show()
End If
当第一行运行时,chgLinePkNum 按预期设置为 1。出于某种奇怪的原因,它还将 chgStudentIDPk 设置为 1。当下一行运行时,它将 chgStudentIDPk 设置为正确的 StudentID 号。问题是,它还将 chgLinePkNum 设置为 StudentID 号。
我已经在调试器中逐行运行它,并且每个属性集函数仅在调用时运行。我只是无法弄清楚“HttpContext.Current.Session(SessionHandler._chgLinePkNum) = value”如何设置 chgStudentIDPk 的值,反之亦然。