如何引用Session.Contents形成一个类?

时间:2010-08-06 17:42:28

标签: .net asp.net vb.net session-variables

这是一个用vb编写的ASP.NET 2010 Web应用程序。我使用了几个Session变量。我想将它们全部传递给中心类,让课程管理它们。但是,我遇到了一些麻烦。

以下是调用页面上的代码:

Dim arrGoodSessions() As String ={"nameofsession1", "nameofsession2", "nameofsession3"}
Utilities.ManageSessionVariables(arrGoodSessions)

它调用静态Utilties类。我已经设置了对System.Web的引用。以下是该类中的代码:

Imports System.Web
Imports System.Web.SessionState
Imports System.Web.SessionState.HttpSessionState
Imports System.Web.HttpContext


Public Class Utilities : Implements IRequiresSessionState
    Public Shared Sub ManageSessionVariables(ByVal arrGoodSessions As String())
        Dim alItemsToBeRemoved As New ArrayList

        For Each Item In Session.Contents
            If arrGoodSessions.Contains(Item.ToString) = False Then
                alItemsToBeRemoved.Add(Item.ToString)
            End If
        Next
        For Each i As String In alItemsToBeRemoved
            Session.Contents.Remove(i)
        Next
    End Sub
End Class

这会尝试简单地读取会话变量的某些名称,然后遍历所有会话变量并删除任何我没有列出的内容。这适用于页面上的所有鳕鱼。但是当我将它移到类中时,它不会重新编写Session.Contents。

3 个答案:

答案 0 :(得分:3)

我认为您需要参考HttpContext.Current.Session

答案 1 :(得分:1)

您可以通过System.Web中的HttpContext.Current引用它们来访问所有ASP.NET对象,例如Session,Request,Response等,如下所示:

For Each Item In HttpContext.Current.Session.Contents
    If arrGoodSessions.Contains(Item.ToString) = False Then
        alItemsToBeRemoved.Add(Item.ToString)
    End If
Next

请记住,如果类在类库项目中,则需要添加对System.Web的引用,并且还要记住,这会使得有问题的代码在HTTP上下文之外无法使用。您可能需要考虑将会话内容作为参数传递给方法,以保持代码可测试和可重用。

答案 2 :(得分:0)

你可以做的一件事是将HttpContext.Current作为一个参数传递给你在你的类中需要的东西,像这样

Public Shared Sub ManageSessionVariables(ByVal arrGoodSessions As String(), ByVal context as HttpContext)

End Sub

现在,在ManageSessionVariables中,您可以访问当前的HttpContext