2013-12-16 21 views
0

我對遺留的asp.net webforms應用程序有一個非常奇怪的問題。 我正在開發一個非常簡單的用戶跟蹤方法,如果查詢字符串參數等於某個值,我需要在頁面加載中調用一個子例程。 例如:如果網頁直接通過URL訪問,則Page_Load不會執行(Default.aspx)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    If Request.QueryString("rf") = "dem" Then 
     TrackUser(); 
    End If 

End Sub 

荒謬的是,如果我通過www.mydomain.com/Default.aspx?rf=dem,TrackUser()加載該網站被調用。 相反,如果我加載www.mydomain.com/?rf=dem,TrackUser()不會被調用。

我認爲這是有關查詢字符串的一個問題,所以我寫了類似:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

     Response.Write("Test page_load") 
     If Request.QueryString("rf") = "dem" Then 
      TrackUser(); 
     End If 

    End Sub 

和「測試的Page_Load」如果我達到過www.mydomain.com的網站不寫。 怎麼回事?

+0

如果您在'如果請求...'中設置了中斷點,那麼會發生什麼? – Win

+3

'default.aspx'是你網站的默認頁面嗎? –

回答

0

奇怪的是,我重新部署了一次,現在它工作。我認爲緩存問題與第一次部署時第一次刪除「Outputcache標籤」時未正確「回收」緩存的應用程序池有關。 但是,感謝您的答覆,併爲無用的問題感到抱歉。

1

爲什麼不把這段代碼放到Global.asax的Application_BeginRequest事件中?

Sub Application_BeginRequest(Byval sender As Object, ByVal e As EventArgs) 

    ' Fires at the beginning of each request 

    If Request.QueryString("rf") = "dem" Then 
     TrackUser() 
    End If 

End Sub 
+0

我只需要特別追蹤三頁。把它放入Global.asax不會減慢整個網站的速度? –

+0

爲什麼你會在頁面級別呢?如果你打算這樣做,至少要創建一個頁面繼承的基頁,以便跟蹤全部在一個地方。但爲此,'Application_BeginRequest'專門用於在每個頁面請求開始之前運行的代碼。這是追蹤的理想場所。 –

+0

我認爲這是最好的解決方案,實際上現在我正在考慮將跟蹤擴展到三四頁以上;並且在beginrequest方法中處理它更可靠,而不是手動編輯每個頁面。謝謝你的建議! –

2

您可能在某處導致輸出緩存打開,導致頁面從先前構建的字符串返回。

+0

我在該頁面上有Default.aspx的OutputCache標誌;我已經刪除它並重新部署網站。但沒有任何改變 –