ASP.NET中的基页/派生页事件模型



我在ASP.NET 中编写了以下代码

我有一个基本页面:

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("Base Page Called");
    }

我有一个派生页面,它有以下代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("Derived Page Called");
    }

现在,当我调用派生页面时,它不会调用基本页面的page_Load。它显示

"调用的派生页"。

现在,如果我将派生页面加载事件处理程序名称更改为"Page1_Load",并且实现如下,那么就会调用Base页面。

  protected void Page1_Load(object sender, EventArgs e)
    {
        Response.Write("Derived Page Called");

    }

"调用了基页"。

这种行为的原因是什么?

Page_Load会自动连接,如果存在一个名为Page_Load的方法,那么如果您在派生类中定义了一个,它会从基类中隐藏该方法。然而,它必须按名称匹配,因此通过给派生类中的一个后缀,它不再隐藏基本实现,因此它将拿起基本实现并使用它

如果你把Page1_Load也放在基地,你将不会得到输出

Base:
protected virtual void Page_Load(object sender, EventArgs e)
    {
        Response.Write("Base Page Called");
    }
Derived:
protected override void Page_Load(object sender, EventArgs e)
{
  base.Page_Load();
  Response.Write("Derived Page Called");
}

如果您希望两者都被称为

,请尝试以上操作

最新更新