Page_Load 离开页面时调用
Page_Load is called when leaving page
我有一个母版页和两个网页,WebForm1 和 WebForm2。在母版页上有两个 LinkButtons 以转到 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) {
}
}
}
您看到的是单击 goto1
或 goto2
导致页面执行 Postback,它遵循页面生命周期。在这种情况下,它涉及母版页和内容页。
几个对此有用的链接是
ASP.NET Page Life Cycle Overview
MasterPage and Content Page life cycle
特别是涉及母版页,这些是事件的顺序
- Content page PreInit event.
- Master page controls Init event.
- Content controls Init event.
- Master page Init event.
- Content page Init event.
- Content page Load event.
- Master page Load event.
- Master page controls Load event.
- Content page controls Load event.
- Content page PreRender event.
- Master page PreRender event.
- Master page controls PreRender event.
- Content page controls PreRender event.
- Master page controls Unload event.
- Content page controls Unload event.
- Master page Unload event.
- Content page Unload event.
这些发生在 PostBack 上,您将看到
Content page Load event
这就是为什么您的 Page_Load
事件为 Click
事件触发导致 PostBack 并且整个生命周期为 WebForm1 在
之前
Response.Redirect("WebForm2.aspx");
执行。
添加到 Kirk 的回答中...
如果您只想简单地 link 到另一个页面,则根本不要使用 LinkButton
。 LinkButton
只是一个提交按钮,其设计看起来像 link - 它通过 ASP.NET 自动构建的 javascript 神奇地连接起来。
如果您想让 link 简单地将您转到另一个页面,只需按常规 HTML:
<a href="WebForm2.aspx">Go To WebForm2</a>
我有一个母版页和两个网页,WebForm1 和 WebForm2。在母版页上有两个 LinkButtons 以转到 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) {
}
}
}
您看到的是单击 goto1
或 goto2
导致页面执行 Postback,它遵循页面生命周期。在这种情况下,它涉及母版页和内容页。
几个对此有用的链接是
ASP.NET Page Life Cycle Overview
MasterPage and Content Page life cycle
特别是涉及母版页,这些是事件的顺序
- Content page PreInit event.
- Master page controls Init event.
- Content controls Init event.
- Master page Init event.
- Content page Init event.
- Content page Load event.
- Master page Load event.
- Master page controls Load event.
- Content page controls Load event.
- Content page PreRender event.
- Master page PreRender event.
- Master page controls PreRender event.
- Content page controls PreRender event.
- Master page controls Unload event.
- Content page controls Unload event.
- Master page Unload event.
- Content page Unload event.
这些发生在 PostBack 上,您将看到
Content page Load event
这就是为什么您的 Page_Load
事件为 Click
事件触发导致 PostBack 并且整个生命周期为 WebForm1 在
Response.Redirect("WebForm2.aspx");
执行。
添加到 Kirk 的回答中...
如果您只想简单地 link 到另一个页面,则根本不要使用 LinkButton
。 LinkButton
只是一个提交按钮,其设计看起来像 link - 它通过 ASP.NET 自动构建的 javascript 神奇地连接起来。
如果您想让 link 简单地将您转到另一个页面,只需按常规 HTML:
<a href="WebForm2.aspx">Go To WebForm2</a>