Вопрос удаления переменной сеанса. в связи с постраничным источником данных - PullRequest
0 голосов
/ 21 декабря 2009

Я унаследовал очень старый код ASP.Net. Первоначально написано в 1.0, а затем преобразовано в 2.0 Существует страница, которая использует пользовательский элемент управления пейджером. Этот элемент управления имеет следующую логику:

Private _DataSource As PagedDataSource
Public Property DataSource() As PagedDataSource
    Get
        If Not IsNothing(Session("DataSource")) Then
            _DataSource = Session("DataSource")
            Return _DataSource
        End If
        Return Nothing
    End Get
    Set(ByVal value As PagedDataSource)
        _DataSource = value
        If Not IsNothing(value) Then
            Session("DataSource") = value
        Else
            Session("DataSource") = Nothing
        End If
    End Set
End Property

Страница, которая использует этот пейджер, имеет следующую логику:

Private PagedData As PagedDataSource

Private Function GetData() As DataTable
    Dim DT As New DataTable
    Dim CategoryID As Integer = -1
    If IsNothing(ddlCategories.SelectedValue) OrElse Not Integer.TryParse  (ddlCategories.SelectedValue, CategoryID) Then
        CategoryID = -1
    End If

    Dim myConnection As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
    Dim myAdapter As New SqlDataAdapter

    myAdapter = New SqlDataAdapter("SearchResources", myConnection)
    myAdapter.SelectCommand.CommandType = CommandType.StoredProcedure

    If SearchText <> String.Empty Then
        trFiltered.Visible = True
    End If

    With myAdapter.SelectCommand.Parameters
        .AddWithValue("@CategoryID", CategoryID)
        .AddWithValue("@SearchText", SearchText)
        .AddWithValue("@CompanyID", CompanyID)
    End With

    If Not Security.IsSiteAdmin Then
        myAdapter.SelectCommand.Parameters.AddWithValue("@UserIsAdmin", 0)
        myAdapter.SelectCommand.Parameters.AddWithValue("@FTPUserID", Security.GetUserID(Context.User.Identity.Name))
    Else
        myAdapter.SelectCommand.Parameters.AddWithValue("@UserIsAdmin", 1)
    End If

    Try
        myAdapter.Fill(DT)
    Catch ex As Exception
        ErrorLog.LogError(ex.Message, ex.StackTrace, HttpContext.Current.User.Identity.Name, HttpContext.Current.Request.Url.ToString)
        HttpContext.Current.Response.Redirect("~/error.aspx", False)
        Return Nothing
    End Try
    Return DT
End Function

Protected Sub ReloadData()
    CurrentPage = 0
    CheckFilters()
    BindData()
End Sub

Задача состояла в том, чтобы удалить все переменные сеанса. Что было бы лучшим способом для представления этих данных без использования сессии. Первоначально мне сказали поместить все элементы сеанса в файл cookie, хотя для большинства элементов это работало, но из-за ограничения размера файла cookie это не сработает, я также не заинтересован в том, чтобы сохранить его во ViewState или даже если это вариант. Я очень новичок в VB и не имею большого опыта переписывания устаревшего кода. Сеанс не является опцией, потому что он перемещается в веб-ферму, а сеансы Sticky отключены, поэтому он должен работать без сеанса.

Любые предложения с благодарностью. Извините, если я задаю вопрос, который имеет болезненно очевидный ответ.

спасибо заранее, -Джеймс.

1 Ответ

0 голосов
/ 21 декабря 2009

Ну, кто-нибудь может прийти и проголосовать за меня ... но я бы сказал, что ваш лучший вариант - ViewState.

Если вы ограничены, поскольку не используете SessionState, и у вас есть ограничение на размер файла cookie, я могу подумать только о двух других вариантах (Cache и ViewState), и я, конечно, не рекомендую Cache для этого.

Теперь вы знаете, что можете использовать состояние сеанса вне процесса (SQL Server или StateServer)?

Более подробную информацию можно найти здесь: http://msdn.microsoft.com/en-us/library/ms178586.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...