【问题标题】:Page_Load not executed if web page accessed directly by URL (Default.aspx)如果通过 URL 直接访问网页,则不执行 Page_Load (Default.aspx)
【发布时间】:2013-12-16 22:03:54
【问题描述】:

我在使用旧的 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

如果我通过 www.mydomain.com 访问该网站,则不会写入“Test page_load”。 怎么会?

【问题讨论】:

  • 如果设置为If Request...,是否会触发断点?
  • default.aspx 是您网站的默认页面吗?

标签: asp.net vb.net webforms


【解决方案1】:

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

【讨论】:

  • 我在那个页面上有 Default.aspx 的 OutputCache 标志;我已经将其删除并重新部署了该网站。但什么都没有改变
【解决方案2】:

为什么不将此代码放入 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

【讨论】:

  • 我只需要特别跟踪三个页面。将其放入 Global.asax 不会减慢整个网站的速度吗?
  • 你为什么要在页面级别做呢?如果你打算这样做,至少创建一个你的页面继承的基本页面,以便跟踪都在一个地方。但为此,Application_BeginRequest 专门用于您希望在每个页面请求开始之前运行的代码。这是跟踪的理想场所。
  • 我认为这是最好的解决方案,实际上我刚才正在考虑将跟踪扩展到三四页以上;并且在 beginrequest 方法中处理它更可靠,而不是手动编辑每个页面。感谢您的建议!
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多