在自定义事件中丢失HttpContext

时间:2012-05-31 15:47:26

标签: asp.net

我在调用以下函数时收到“此上下文错误中没有响应”:

Private Sub ReloadPage(ByVal inNumber As Integer) Handles tempaux.Advertise
    'Response.Redirect("tope.aspx?dep=" & CStr(inNumber))
    Response.Write("<script>window.open('tope.aspx?dep= & CStr(inNumber)','topFrame');</script>")
End Sub

我已经更改了在Response.Write之前添加System.Web.HttpContext.Current的行,我得到'对象引用没有设置为对象的实例'。

提供一些背景知识:正如您所见,tope.aspx在topframe中打开。加载后,它会立即启动我定义的CustomTimer对象:

Public Class tope
    Inherits System.Web.UI.Page
    Public funciones As funciones = New funciones
    Dim WithEvents tempaux As CustomTimer = Global.objCustomTimer

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim inUserProfile As Int64
        Try
            tempaux.StartTimer()
        Catch ex As Exception
            'bla bla
        End Try

正如您所看到的,我已在Global.asax中声明了CustomTimer。 CustomTimer对象每5秒引发一次Advertise事件,并将'inNumber'作为tope.aspx页面的参数传递给刷新一些标签,这很简单。 CustomTimer是我管理计时器的一个类,它不会继承任何其他类(对于我在搜索中学到的东西,它必须继承一些httpthing,但我不确定)。我猜测在某些时候httpcontext正在丢失(我在谷歌搜索过,我无法想象它的生命周期或任何告诉我它为什么会死的信息)。任何人都可以帮我找出问题所在吗?

感谢

1 个答案:

答案 0 :(得分:0)

您的计时器存在于tope页面类之外,因此在页面的响应完成且不再有HttpContext.Current实例后,可能会触发计时器事件。

听起来你要做的就是在页面加载后每隔5秒更改页面上的广告横幅。您需要使用javascript计时器执行此操作,该计时器将每5秒触发一次并向您的Web服务器发出请求以获取新广告。