2012-05-31 98 views
0

,我發現了丟失的HttpContext「沒有獲得響應在這種情況下錯誤」調用以下函數:在自定義事件

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 

我已經改了行添加System.Web.HttpContext。 Response.Write之前的電流,我得到'對象引用未設置爲對象的實例'。

給出一些背景:正如你所看到的,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是我管理定時器的一個類,它不會繼承任何其他類(因爲我在搜索中學到了它必須繼承一些HTTP,但我不確定)。我猜測,在某些時候,httpcontext正在丟失(我在谷歌搜索,我無法計算其生命週期或任何信息,告訴我爲什麼它會死)。任何人都可以幫助我找出問題所在?

感謝

回答

0

你的計時器存在TOPE頁面類之外,因此有可能計時器事件燒製後從頁面的響應是完整的,不再是HttpContext.Current實例。

這聽起來像你正在嘗試做的事情是,一旦頁面被加載,每5秒更換一次頁面上的廣告橫幅。您需要使用JavaScript定時器來執行此操作,該定時器將每5秒觸發一次,並向您的Web服務器發送請求以獲取新廣告。

+1

嗯,我明白了。問題是'刷新'的時間是從數據庫中獲得的,甚至可以在運行時更改,除了我必須重新加載頁面,並給它一個從數據庫中獲取的參數。 Mi的想法是用VB管理所有的東西。沒有一種「創建HttpContext」的方式,就像應用程序在單擊按鈕然後使用Respose.Redirect時一樣? 我想另一個選擇是使用AJAX,但因爲我使用Visual Studio 2003我不知道它是否得到很好的支持。 – user1428789

+0

您可以嘗試創建一個HttpContext,但該響應不會返回給用戶的瀏覽器,因爲它不啓動請求。根據您問題中的描述,我相信您需要使用JavaScript來刷新廣告。如果不是,則需要提供更多描述。 – slolife