会话变量删除问题。与分页数据源相关

时间:2009-12-21 18:12:11

标签: asp.net vb.net session

我继承了一些非常旧的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的新手,并没有很多重复写入遗留代码。会话不是一个选项,因为它被移动到一个Web场,Sticky会话被关闭,所以它必须在没有会话的情况下工作。

非常感谢任何建议。对不起,如果我问一个有明显答案的问题。

提前谢谢, -詹姆士。

1 个答案:

答案 0 :(得分:0)

好吧,有人可能会过来投票给我...但我会说你最好的选择是ViewState。

如果您因为不使用SessionState而受限制而且遇到cookie大小限制,我只能考虑其他两个选项(Cache和ViewState),我当然不会为此推荐Cache。

现在您知道可以使用进程外会话状态(SQL Server或StateServer)吗?

更多信息可以在这里找到: http://msdn.microsoft.com/en-us/library/ms178586.aspx