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
相关产品推荐
相关产品推荐

