这是一个用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。
答案 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