如果网页直接通过URL访问,则不会执行Page_Load(Default.aspx)

时间:2013-12-16 22:03:54

标签: asp.net vb.net webforms

我对传统的asp.net webforms应用程序有一个非常奇怪的问题。 我正在开发一个非常简单的用户跟踪方法,如果查询字符串参数等于某事,我需要在页面加载中调用单个子例程。 例如:

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访问该网站,则不会写入。 怎么样?

3 个答案:

答案 0 :(得分:2)

您可能在某处导致输出缓存导致从先前构建的字符串返回页面。

答案 1 :(得分: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

答案 2 :(得分:0)

奇怪的是,我再次重新部署,现在它可以工作了。我认为缓存的问题与我在第一次部署中首次删除“Outputcache标记”时未正确“回收”缓存的应用程序池有关。 谢谢你的回复;抱歉这个无用的问题。