2010-08-06 6 views
2

이것은 Visual Basic으로 작성된 ASP.NET 2010 웹 응용 프로그램입니다. 세션 변수를 여러 개 사용합니다. 나는 그들 모두를 중앙 수업에 보내고 수업에서 그들을 관리하게하고 싶다. 그러나 몇 가지 문제가 있습니다.Session.Contents 양식을 참조하는 방법은 무엇입니까?

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

그것은 정적 utility와 클래스 호출 여기

는 호출 페이지에 코드입니다. 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

은 당신이 당신과 같이, System.Web에 HttpContext.Current 통해 그들을 참조하여 ASP.NET의 모든 등 세션, 요청, 응답, 같은 개체에 액세스 할 수 있습니다 HttpContext.Current.Session

1

를 참조 할 필요가 있다고 생각 :

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 문맥 외부에서 문제의 코드를 사용할 수 없다는 점에 유의해야합니다. 세션 내용을 매개 변수로 전달하여 코드를 테스트하고 재사용 가능한 상태로 유지하는 것이 좋습니다. 당신이 할 수

0

것은 현재 HttpContext에 대한 액세스 권한이 ManageSessionVariables 내에서 지금 당신이 당신의 수업이

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

End Sub 

같은 것을 그것을 필요로하는 곳에 매개 변수로 HttpContext.Current를 전달하고

관련 문제