离开页面时调用Page_Load

本文关键字:Page Load 调用 离开 | 更新日期: 2023-09-27 17:57:05

我有一个母版页和两个网页,WebForm1和WebForm2。在母版页上有两个链接按钮,用于转到 WebForm1 或 WebForm2。

当我单击 LinkButton 转到 WebForm1 时,调用了 WebForm1 的Page_Load事件处理程序,Page.IsPostBack == false。目前为止,一切都好。

然后,当我单击以转到WebForm2时,将发生这种情况:

a) The Page_Load event handler for WebForm1 is called again and Page.IsPostBack == true.
b) Then the Page_Load event handler for WebForm2 is called and its Page_Load == false.
Vice versa when going back to WebForm1.

为什么当我要转到 WebForm2 时调用 WebForm1 的Page_Load?我正在加载 WebForm2 而不是 WebForm1。

对于所有页面:AutoEventWireup="true"。

<form id="form1" runat="server">
<div>
    <p>This is MySite.Master.</p>
    <p>
        <asp:LinkButton ID="goto1" runat="server" OnClick="goto1_Click">Go To WebForm1</asp:LinkButton>
    </p>
    <p>
        <asp:LinkButton ID="goto2" runat="server" OnClick="goto2_Click">Go To WebForm2</asp:LinkButton>
    </p>
    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
    </asp:ContentPlaceHolder>
</div>
</form>

protected void goto1_Click(object sender, EventArgs e) {
    Response.Redirect("WebForm1.aspx");
}
protected void goto2_Click(object sender, EventArgs e) {
    Response.Redirect("WebForm2.aspx");
}

public partial class WebForm1 : System.Web.UI.Page {
    protected void Page_Load(object sender, EventArgs e) {
        if (Page.IsPostBack) {
        }
    }
}

public partial class WebForm2 : System.Web.UI.Page {
    protected void Page_Load(object sender, EventArgs e) {
        if (Page.IsPostBack) {
        }
    }
}

离开页面时调用Page_Load

看到的是,单击goto1goto2会导致页面执行遵循页面生命周期的回发。在这种情况下,它涉及母版页和内容页。

对此有用的几个链接是

ASP.NET 页面生命周期概述

母版页和内容页生命周期

特别是涉及母版页,这些是事件的顺序

  1. 内容页预初始化事件。
  2. 母版页控制初始化事件。
  3. 内容控制初始化事件。
  4. 母版页初始化事件。
  5. 内容页初始化事件。
  6. 内容页加载事件。
  7. 母版页加载事件。
  8. 母版页控制加载事件。
  9. 内容页控制加载事件。
  10. 内容页预呈现事件。
  11. 母版页预呈现事件。
  12. 母版页控制预呈现事件。
  13. 内容页控制预呈现事件。
  14. 母版页控制卸载事件。
  15. 内容页控制卸载事件。
  16. 母版页卸载事件。
  17. 内容页卸载事件。

这些发生在回发上,您将看到一个

内容页加载事件

这就是为什么您的 Page_Load 事件针对导致回发Click 事件触发,并且之前为 WebForm1 执行整个生命周期

Response.Redirect("WebForm2.aspx");

执行。

补充柯克的答案...

当您只想链接到另一个页面时,根本不要使用LinkButtonLinkButton只是一个提交按钮,它被设计成看起来像一个链接 - 它都是通过 ASP.NET 自动生成的JavaScript神奇地连接起来的。

如果您希望链接简单地将您发送到另一个页面,只需在常规HTML中进行操作:

<a href="WebForm2.aspx">Go To WebForm2</a>