缓存中的属性:请求在此上下文中不可用

时间:2014-12-02 18:57:15

标签: jquery asp.net ajax vb.net iis

我已经查看了所有其他“请求在此上下文中不可用”的帖子,并且这种情况看起来很独特。

我们应用程序中的许多页面都继承自“基页”类(我们称之为BP2),该类继承自继承自System.Web的另一个“基页”类(我们称之为BP1)。 UI.Page。我们在底层基页(BP2)中存储了许多共享函数和Web方法。我试图从jQuery访问其中一个Web方法,并收到错误:请求在此上下文中不可用。从代码隐藏中访问该方法工作正常。

此Web方法是BP2中的公共共享函数,错误似乎来自该函数尝试从BP1访问的属性。该属性是存储在HttpContext.Current.Cache中的数据库结果列表,该列表在第一次请求时填充。但是,查看HttpContext.Current.CurrentHandler对象会显示属性值为{“请求在此上下文中不可用。”}并且永远不会填充它。以下是代码的“简化”版本:

BP2:

<WebMethod()>
Public Shared Function SaveThing() As Integer
    Return HttpContext.Current.CurrentHandler.GetListOfValueId("something")
End Function

BP1:

Public ReadOnly Property ListOfValues As List(Of lovDbResult)
    Get
        Return Utility.ListOfValues
    End Get
End Property

Public Function GetListOfValueId(ByVal value As String) As Integer
    If value <> "" Then
        'Problem is in the next line.
        For Each lov In HttpContext.Current.CurrentHandler.ListOfValues.Where(....)
            Return lov.id
        Next
    End If
    Return New Nullable(Of Integer)
End Function

实用程序:

Public Shared ReadOnly Property ListOfValues() As List(Of lovDbResult)
    Get
        If HttpContext.Current.Cache("ListOfValues") Is Nothing Then
            'Retrieve from database and add to cache.
        End If
        Return HttpContext.Current.Cache("ListOfValues")
    End Get
End Property

编辑:重要的是要注意lovDbResult是一个LINQ to SQL结果对象。

1 个答案:

答案 0 :(得分:0)

显然,我错误地发现了这个错误发生的地方。该属性未被填充,因为在上面的伪代码部分中显示“'从数据库中检索并添加到缓存中”,调用了HttpContext.Current.CurrentHandler.Request,其中<​​em>是在WebMethod调用的上下文中不可用。通过将其更改为HttpContext.Current.Request来更正此问题。