1

我有一个奇怪的问题。我使用了很多会话变量,因此我不必在每次页面进行回发时都来回传递它们。我多年来一直这样做,所以我完全不知所措。

我在 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 的值,反之亦然。

4

1 回答 1

1

与这些具有完全相同的值有什么关系?

Private Shared _chgLinePkNum As String = "0"
Private Shared _chgStudentIDPk As String = "0"
于 2012-06-21T21:13:05.607 回答