Как мне ссылаться на Session.Contents формировать класс? - PullRequest
2 голосов
/ 06 августа 2010

Это веб-приложение ASP.NET 2010, написанное на vb.Я использую несколько переменных 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 ]

3 голосов
/ 06 августа 2010

Я думаю, что вам нужно ссылку HttpContext.Current.Session

1 голос
/ 06 августа 2010

Вы можете получить доступ ко всем объектам ASP.NET, таким как Session, Request, Response и т. Д., Ссылаясь на них через HttpContext.Current в System.Web, например:

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 голосов
/ 07 августа 2010

Одна вещь, которую вы можете сделать, это передать HttpContext.Current в качестве параметра, где он вам нужен в вашем классе, что-то вроде этого

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

End Sub

И теперь в ManageSessionVariables у вас есть доступ к текущему HttpContext

...