gpt4 book ai didi

c# - 在此 ASP.NET webforms 页面中以何种顺序执行哪些方法

转载 作者:太空狗 更新时间:2023-10-29 21:53:46 25 4
gpt4 key购买 nike

前几天我在重构一些旧网站时偶然发现了这种情况。我有一个 ASP.NET 3.5 C# WebForms 页面。在后面的代码中,我有一个这样的事件处理程序:

protected override void OnPreRender(EventArgs e) { }

另一方面,在标记中,我还有:

<script language="C#" runat="server">
void Page_PreRender()
{

}
</script>

问题是:生命周期是什么样的?首先执行什么?其中一个甚至被处决了吗?

最佳答案

提前两点:

  • OnPreRender 方法不是事件处理程序。它是方法 Page.OnPreRender 的重写(这是将引发 PreRender 事件的方法)。
  • 方法 Page_PreRender 自动连接到 PreRender 事件。所以这是一个事件处理程序(针对 PreRender 事件)。

调用顺序

以下代码示例显示了执行顺序:

// code-behind
protected override void OnPreRender(EventArgs e)
{
// 1. code put here will be executed first

// now we call the base class' version, which will then raise the
// PreRender event
base.OnPreRender(e);

// 3. code put here will be executed last
}

// markup
<script language="C#" runat="server">
void Page_PreRender()
{
// 2. code put here will be executed second
}
</script>

请注意,在 OnPreRender() 内部调用了基类:base.OnPreRender()。如上所述,如果缺少它,则不会引发 PreRender 事件,因此不会调用事件处理程序。

您的代码示例

在您的示例代码中,缺少对 base.OnPreRender 的调用。这意味着,不会引发 PreRender 事件,因此不会调用(事件处理程序)方法 Page_PreRender()

还有一些要考虑的问题

  • 如果您的标记和代码隐藏中有 Page_PreRender() 事件处理程序,则只会调用代码隐藏中的事件处理程序。

  • 如果您在 Page 指令中禁用事件的自动连接(例如 < % @ Page AutoEventWireup="false" ... % > ),则 Page_PreRender() 事件处理程序将不会连接/连接到 PreRender 事件,因此不会被调用。

  • 您还可以手动将处理程序附加到事件,例如:


 protected void Page_Load(object sender, EventArgs e)
{
PreRender += PreRenderEventHandler;
}
void PreRenderEventHandler(object sender, EventArgs e)
{
}

关于c# - 在此 ASP.NET webforms 页面中以何种顺序执行哪些方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29905942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com