2

我有一个奇怪的问题。这是场景

这是我的文件:

  1. 项目1.aspx
  2. 项目2.aspx

它们的设置完全相同,包括它们的 Page_Load 函数:

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

If (Not Page.IsPostBack) Then

   setPrevIndex(-1)

   ...

   End If


End Sub

他们都是这样设置的。

这是我遇到问题的地方。当我导航到这些页面中的任何一个时,我需要确保 prevIndex 设置为 -1(通过函数)。

  • 对于Project1.aspx,当我导航到页面时,Page_Load 会触发。
  • 对于Project1.aspx,当我刷新页面时,Page_Load 会触发。
  • 对于Project1.aspx,当我在浏览器导航栏中按“Go”并返回当前页面时,Page_Load 会触发。

  • 对于Project2.aspx,当我导航到页面时,Page_Load 会触发。
  • 对于Project2.aspx,当我刷新页面时,Page_Load 会触发。
  • 对于Project2.aspx,当我在浏览器导航栏中按“Go”并返回当前页面时, Page_Load 根本不会触发! 该函数甚至没有被调用。

任何想法为什么?什么会导致这个?

请要求澄清。

更新:

当我在指向同一个 URL 的 URL 中按“Go”时,似乎母版页是唯一重新加载的东西,但 Load_Page 事件甚至没有触发......

还有其他建议吗?

谢谢, 乙

4

9 回答 9

6

尝试禁用输出缓存,看看问题是否仍然存在:

<system.web>
  <caching>
    <outputCache enableOutputCache="false"/>
  </caching>
<system.web>
于 2009-07-20T15:38:03.767 回答
3

使用LiveHTTPHeadersFiddler确保页面实际上每次都以相同的方式被请求。这可能是缓存的问题。

于 2009-07-10T20:16:34.710 回答
3

在本地加载您的网站并转到http://yourwebsite/trace.axd

这显示了每个页面的服务器跟踪以及服务器状态。它还显示了完整的页面生命周期和时间。

清除当前跟踪,然后重复您的 3 次访问并重新加载每个到 Project1.aspx 和 Project2.aspx

trace.axd 现在显示什么?您应该有 6 个条目,每个条目的状态代码为 200 和动词 GET。

如果你有更少那么你的问题是某种缓存。

如果您有 6 个,请检查最后一个的详细信息 - 页面事件生命周期显示什么?它还将显示完整的 WebForm 控件层次结构,因此如果这与母版页相关,您将能够分辨出来。

于 2009-07-21T07:20:00.063 回答
1

尝试在 Page Init Event 中将 previndex 设置为 -1。我不确定为什么会这样。

于 2009-07-09T17:02:48.647 回答
1

各种与缓存相关的事情可能会导致请求无法发出,特别是当您仅按“开始”按钮时,因此您应该检查您的缓存头。

如果缓存是问题,您可以执行以下操作:

//ask browser to revalidate:
context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
//and hint that the page is outdated anyhow...
context.Response.Cache.SetMaxAge(TimeSpan.Zero);

这应该会说服浏览器在每次浏览量中真正获得一个新版本。例如,您可以在 Page_Load 本身中设置这些变量;-)。如果您不使用 https,那么以下内容也是无风险的:

//prevents plugin based file-open in IE+https, otherwise fine:
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();

我敢打赌这可以解决它 - 如果没有,我支持 Jeremy Steins 的建议,即你使用fiddler来验证请求是否真的被发出(而且由于你是一个 web 开发人员,无论如何都要得到 fiddler,它是一个方便的工具,适用于所有浏览器!)。

最后——你能知道当你点击 go 时页面上是否还有其他代码运行吗?(即整个页面没有运行,或者只是 Page_Load - 后者会提示事件连接错误,考虑到您的负载处理程序有时会触发,这会很奇怪)。

于 2009-07-20T15:24:01.190 回答
0

听起来您的页面已被缓存。这将导致 Page_Load 不触发。检查您是否没有在任何地方设置它。

于 2009-07-16T18:19:58.850 回答
0

您是否尝试过将应用程序发布到另一台机器上?可能是 IIS 在做某事,所以请先尝试消除它。假设您的代码在两者中都是相同的,只是页面名称不同(对 aspx 和 .cs 文件进行差异验证)然后将您的应用程序移动到不同的服务器并重新测试。

如果它仍然发生,那么它真的必须是您的浏览器在缓存方面做了一些事情。

于 2009-07-18T05:02:42.217 回答
0

尝试在服务器上使用精简功能重新创建场景。如果问题仍然存在,请尝试使用一些缓存计数器方法。如果不是,那意味着它必须是您的代码。

于 2009-07-20T21:14:17.130 回答
0

如果您在页面(或母版页)的顶部有这个(或类似的),这将导致它:

<%@ OutputCache Duration="3600" VaryByParam="none" %>
于 2016-05-05T14:51:50.677 回答