You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#继承System.Web.UI.Page后如何自动执行父类Load逻辑?

ASP.NET中C#继承Page类实现父类Load逻辑自动执行

你当前的实现不需要手动调用InheritedPage_Load,这种写法不符合ASP.NET的事件绑定机制,以下是两种正确的实现方式,能让父类的Load逻辑自动执行:


方式一:重写OnLoad方法(推荐)

ASP.NET页面生命周期中,OnLoad是基类提供的虚方法,父类重写该方法后,子类无需额外操作,父类逻辑会自动在子类Page_Load前执行。

修改父类代码:

namespace Vendor
{
    public class InheritedPage : System.Web.UI.Page
    {
        protected override void OnLoad(EventArgs e)
        {
            // 先执行基类的OnLoad基础逻辑
            base.OnLoad(e);
            
            // 自定义父类Load逻辑
            Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
            Response.Cache.SetNoStore();
        }
    }
}

子类正常编写业务代码即可,无需手动调用父类方法:

namespace Vendor
{
    public partial class Vendor : InheritedPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                // 子类业务代码
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}

方式二:显式绑定父类Load事件

如果坚持使用事件模式,可在父类构造函数或OnInit方法中绑定Load事件到自定义方法,事件会自动触发。

修改父类代码:

namespace Vendor
{
    public class InheritedPage : System.Web.UI.Page
    {
        public InheritedPage()
        {
            // 绑定Load事件到自定义处理方法
            this.Load += InheritedPage_Load;
        }

        protected void InheritedPage_Load(object sender, EventArgs e)
        {
            Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
            Response.Cache.SetNoStore();
        }
    }
}

子类同样无需手动调用父类方法,父类事件会在页面生命周期中自动执行,且优先于子类的Page_Load。


补充:VB与C#的差异说明

VB.NET的Web窗体默认通过Handles MyBase.Load语法自动处理父类事件绑定,而C#需要显式重写虚方法或手动绑定事件,这是两种语言在ASP.NET事件处理机制上的区别。

内容的提问来源于stack exchange,提问作者Steve Gray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:57:14