使用ASP.NET从另一个页面返回后,为什么Page_Load没有触发 – ergo epic embarrassment :)

假设我在同一个ASP.NET C#WebSite上有两个页面。

  • Page1.aspx在Page_Load事件中执行操作
  • 我使用菜单导航到Page2.aspx
  • Page2.aspx做了一些事情然后Response.Redirect回到Page1.aspx
  • 这次Page1.aspx无法在Page_Load事件中执行任务,因为它永远不会触发。

我试图以声明方式关闭缓存,尝试在我的重定向中使用true for endResponse …似乎没有任何区别。

别介意大家! 我是个白痴! 使用Visual Studio Dev Localhost,Redirect重定向到实时页面! 🙂

页面执行的原因不会影响页面循环,Load页面执行时始终会触发Load事件。

因此,如果Page_Load有时不运行,那是因为页面被缓存而且不在服务器上执行。 页面可以缓存在浏览器中,在路径中的某个路由器中,或者使用服务器端页面缓存在服务器上缓存。

如果您尚未为页面启用服务器端页面缓存,则会将其缓存在浏览器或网络中。 您可以使用缓存设置来尝试消除此问题:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

这将使页面在正常情况下不被缓存。 (还要检查您的浏览器是否处于脱机模式,然后它将使用缓存中的任何内容,无论其缓存设置如何。)

使用“后退”按钮导航到页面时,页面将从内存中重新加载,并且不会向服务器发送任何请求。

您可以使用Fiddler确认。

我不确定在所有浏览器中是否都是这样。

如果您正在重定向,则客户端可能会缓存响应。 为了超越这个,您可以添加一个额外的查询参数,只需保留时间。

这通常足以超越大多数页面缓存机制。

尝试使用Server.Transfer而不是Response.Redirect。

客户端不会看到URL更改,但这可能无关紧要,具体取决于您的要求

我有同样的问题,发现这对我有用:(在Page_Load部分添加)

  if (this.Master.Page.Header != null && Session["RELOAD"] == null) { System.Web.UI.HtmlControls.HtmlHead hh = this.Master.Page.Header; System.Web.UI.HtmlControls.HtmlMeta hm = new System.Web.UI.HtmlControls.HtmlMeta(); hm.Attributes.Add("http-equiv", "Refresh"); hm.Attributes.Add("content", "3"); hh.Controls.Add(hm); } 

然后我在执行我想要运行的代码之后立即添加Session [“RELOAD”] =“1”以防止它一遍又一遍地刷新。 奇迹般有效。

将VS从调试更改为发布模式对我有用….

请运行以下代码以禁用Firefox中的页面缓存。

 Response.AppendHeader("Cache-Control", "no-store"); 

在主页面的页面加载中应用它。