使用ASP.NET从另一个页面返回后,为什么Page_Load没有触发 - ergo史诗般的尴尬:)

时间:2010-02-17 14:12:51

标签: c# asp.net events response.redirect

假设我在同一个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重定向到实时页面! :)

7 个答案:

答案 0 :(得分:14)

页面执行的原因不会影响页面循环,在页面执行时会激活Load事件

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

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

Response.Cache.SetCacheability(HttpCacheability.NoCache);

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

答案 1 :(得分:5)

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

您可以使用Fiddler确认这一点。

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

我遇到了同样的问题,发现这适用于我:(在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”以防止它一遍又一遍地刷新。像魅力一样。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

在母版页的页面加载中应用它。