【问题标题】:Page_Load is called when leaving page离开页面时调用 Page_Load
【发布时间】:2016-07-15 18:20:32
【问题描述】:

我有一个母版页和两个网页,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) {

        }
    }
}

【问题讨论】:

  • 这就是 asp.net 按钮的工作方式。它们会导致页面回发,这就是再次点击 page_load 的原因。然后点击处理程序将触发。
  • @S.Akbari 请看下面的答案

标签: c# asp.net .net master-pages


【解决方案1】:

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

对此有用的几个链接是

ASP.NET Page Life Cycle Overview

MasterPage and Content Page life cycle

尤其是涉及的母版页,这些是事件的顺序

  1. 内容页PreInit事件。
  2. 母版页控制 Init 事件。
  3. 内容控制 Init 事件。
  4. 母版页初始化事件。
  5. 内容页初始化事件。
  6. 内容页面加载事件。
  7. 母版页加载事件。
  8. 母版页控制 Load 事件。
  9. 内容页面控制 Load 事件。
  10. 内容页面PreRender事件。
  11. 母版页PreRender事件。
  12. 母版页控制 PreRender 事件。
  13. 内容页面控制 PreRender 事件。
  14. 母版页控制 Unload 事件。
  15. 内容页面控制 Unload 事件。
  16. 母版页卸载事件。
  17. 内容页面卸载事件。

这些发生在 PostBack 上,你会看到一个

内容页面加载事件

这就是为什么您的 Page_Load 事件会触发 Click 事件导致 PostBack 并且在 WebForm1 之前执行完整的生命周期

Response.Redirect("WebForm2.aspx");

执行。

【讨论】:

    【解决方案2】:

    补充柯克的答案...

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

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

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

    【讨论】:

    • 我试过
    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多