Page_Load没有被重新导航调用

时间:2009-07-09 16:48:41

标签: asp.net pageload

我遇到了一个奇怪的问题。这是方案

以下是我的文件:

  1. Project1.aspx
  2. Project2.aspx
  3. 它们的设置完全相同,包括它们的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 ,当我在浏览器导航栏中按“开始”,返回当前页面时,会激活Page_Load。

    • 导航时对于 Project2.aspx 在页面上,Page_Load会激活。
    • 刷新时 Project2.aspx 页面,Page_Load触发。
    • Project2.aspx 在我的浏览器导航栏中“转到”, 回到当前页面, Page_Load根本不会触发!该功能不均匀 调用。

    任何想法为什么???会导致这种情况的原因是什么?

    请要求澄清。

    更新

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

    还有其他建议吗?

    谢谢, ë

9 个答案:

答案 0 :(得分:6)

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

<system.web>
  <caching>
    <outputCache enableOutputCache="false"/>
  </caching>
<system.web>

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

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

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

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

如果你的数量较少那么你的问题就是某种缓存。

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

答案 3 :(得分:1)

尝试在Page Init Event中将previndex设置为-1。我不知道为什么会发生这种情况。

答案 4 :(得分:1)

各种与缓存相关的事情可能导致请求无法进行,特别是当您只按“go”按钮时,您应该检查缓存标题。

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

//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-dev,无论如何得到小提琴手,它是一个方便的工具,可用于所有浏览器!)。

最后 - 你可以告诉你点击go时页面上是否有其他代码? (即整个页面没有运行,或只是Page_Load - 后者会建议事件连线错误,考虑到你的加载程序有时开火),这将是奇怪的。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

如果它仍在发生,它确实必须是你的浏览器做一些可能与缓存有关的事情。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

如果您在页面顶部(或母版页)上有此(或类似),则会导致:

/* Class Schedule table */

.schedule-wrapper {} .schedule {
  width: 100%;
  table-layout: fixed;
  border-spacing: 0;
  margin: auto 0;
  font-size: .8em;
}
.schedule p {
  line-height: 1.2em;
}
.schedule th,
.schedule td {
  border: solid tan 1px;
  min-width: 250px;
  text-align: left;
  vertical-align: top;
  padding-left: 10px;
  padding-right: 10px;
  padding-top: 5px;
}
.schedule th {
  text-align: center;
}
.schedule .header-row,
.schedule .header-col {
  background-color: lightgrey;
  text-align: center
}
.schedule .header-col {
  padding-left: 5px;
  padding-right: 5px;
  vertical-align: middle;
  max-width: 125px !important;
  min-width: 100px !important;
}
.class-title {
  padding: 5px;
  font-size: 1.2em;
  text-decoration: underline;
  text-align: left;
  color: blue;
}
.instructor {
  padding: 5px;
  padding-top: 8px;
  font-size: 1em;
  text-decoration: underline;
  text-align: right;
  color: blue;
}
.class-descrip,
.instructor-bio {
  color: purple;
  display: none;
}
.class-title:hover + .class-descrip,
.instructor:hover + .instructor-bio {
  display: block;
}
.popup {
  border: 2px solid #000;
  border-radius: 10px;
  width: 200px;
  height: 250px;
  overflow: auto;
  background-color: rgba(0, 0, 0, .6);
  color: #fff;
  z-index: 1000;
  position: absolute;
}
@media only screen and (max-width: 1200px) {
  .schedule-wrapper {
    -webkit-overflow-scrolling: touch;
    overflow-x: auto;
    margin: 0 0;
  }
  .schedule {
    width: auto;
  }
  .schedule th,
  .schedule td {
    max-width: 150px;
  }
}