Page_Load 离开页面时调用

Page_Load is called when leaving page

我有一个母版页和两个网页,WebForm1 和 WebForm2。在母版页上有两个 LinkBut​​tons 以转到 WebForm1 或 WebForm2。

当我单击 LinkBut​​ton 转到 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) {

        }
    }
}

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

几个对此有用的链接是

ASP.NET Page Life Cycle Overview

MasterPage and Content Page life cycle

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

  1. Content page PreInit event.
  2. Master page controls Init event.
  3. Content controls Init event.
  4. Master page Init event.
  5. Content page Init event.
  6. Content page Load event.
  7. Master page Load event.
  8. Master page controls Load event.
  9. Content page controls Load event.
  10. Content page PreRender event.
  11. Master page PreRender event.
  12. Master page controls PreRender event.
  13. Content page controls PreRender event.
  14. Master page controls Unload event.
  15. Content page controls Unload event.
  16. Master page Unload event.
  17. Content page Unload event.

这些发生在 PostBack 上,您将看到

Content page Load event

这就是为什么您的 Page_Load 事件为 Click 事件触发导致 PostBack 并且整个生命周期为 WebForm1

之前
Response.Redirect("WebForm2.aspx");

执行。

添加到 Kirk 的回答中...

如果您只想简单地 link 到另一个页面,则根本不要使用 LinkButtonLinkButton 只是一个提交按钮,其设计看起来像 link - 它通过 ASP.NET 自动构建的 javascript 神奇地连接起来。

如果您想让 link 简单地将您转到另一个页面,只需按常规 HTML:

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