自定义Web页面基类的PageLoad事件和web页面自己的PageLoad的执行先后

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

我设计了一个类BasePage
(作为所有网站的页面的基类,这时所有的页面就不是继承自Web.UI.Page了,而是继承自BasePage了)

//我的基类的代码(父类)

public class BasePage : System.Web.UI.Page //父类继承自System.Web.UI.Page
{
//重写System.Web.UI.Page的OnInit事件
protected override void OnInit( EventArgs e )
{
base.OnInit( e );
this.Load += new EventHandler( this.BasePage_Load );
}

protected void BasePage_Load( object sender, System.EventArgs e )
{
//do sth.......
}

}

//------------------------------------------------------------------------

//我的页面的代码 (子类)

public class WebForm1 : BasePage
{
private void Page_Load(object sender, System.EventArgs e)
{
//do WebForm1 sth..webForm1自己的Page_load事件中的余下的代码!
}

我在Debug的过程中 发现 程序的流程是:

首先执行webForm1的Page_load事件的代码-->然后再执行BasePage的Page_load事件的代码!!


我现在的要求是:

在webForm1的Page_load事件中首先执行(且只执行1次)它的父类(BasePage)的Page_load事件,
然后才是webForm1自己的Page_load事件中的余下的代码!

于是,我修改了WebForm1的PageLoad事件

public class WebForm1 : BasePage
{
private void Page_Load(object sender, System.EventArgs e)
{
base.Page_Load( sender, e ) //首先执行基类的PageLoad事件

//do WebForm1 sth.. webForm1自己的Page_load事件中的余下的代码!
}

}

可是又发现 程序执行的流程是:

base.Page_Load( sender, e ) --> //do WebForm1 sth.... --> BasePage的PageLoad事件

BasePage的PageLoad执行了2次!!!

我现在的要求是:

在webForm1的Page_load事件中首先执行(且只执行1次)它的父类(BasePage)的Page_load事件,
然后才是webForm1自己的Page_load事件中的余下的代码!

我该怎么办呢? 各位帮帮我吧!! 谢谢了!


______________________________________________________________________________________________
答1:
override
______________________________________________________________________________________________
答2:
private override void Page_Load(...)
{
base.Page(Load(sender,e);
}
______________________________________________________________________________________________
答3:
谢谢 我试试!
______________________________________________________________________________________________
答4:
首先,打开WebForm页面的CodeBehind 找到以下的代码片断:

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//

// CODEGEN:该调用是 Web 窗体设计器所必需的。
//
InitializeComponent(); 1 <------注意它们的先后顺序!
base.OnInit(e); 2 <------
}

做以下的修改:

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 Web 窗体设计器所必需的。
//
base.OnInit(e); 2 <------将它们原来的位置调换!!
InitializeComponent(); 1 <------
}


这样就可以在WebForm的PageLoad事件中,首先执行的是基类的PageLoad事件(只执行1次!),然后才是WebForm事件的其他的代码!

经测试通过! 道理就不说了! 呵呵!



______________________________________________________________________________________________
答5:
我觉得override OnLoad(EventArgus e)是不是可以实现,不必要写别的了吧?
______________________________________________________________________________________________
答6:
imports(小鸡快跑!Q_Q) 说的不错
______________________________________________________________________________________________
答7:
哈哈,重写
private override void Page_Load(...)
{
base.Page(Load(sender,e);
}

或者在BasePage 中增加一个构造函数,执行基类中page_load的处理,这样webform1首先调用
构造函数,再执行webform1.page_load.

希望大家发表意见,webform1在IDE设计模式打不开,只能看到html模式

______________________________________________________________________________________________
答8:
//我的基类的代码(父类)

public class BasePage : System.Web.UI.Page //父类继承自System.Web.UI.Page
{
//重写System.Web.UI.Page的OnInit事件
protected override void OnInit( EventArgs e )
{
base.OnInit( e );
this.Load += new EventHandler( this.BasePage_Load );
}

protected void BasePage_Load( object sender, System.EventArgs e )
{
MyFun();
//do sth.......
}
protected virtual void MyFun(){
//do sth……
}

}

//------------------------------------------------------------------------

//我的页面的代码 (子类)

public class WebForm1 : BasePage
{
// private void Page_Load(object sender, System.EventArgs e)
// {
// //do WebForm1 sth..webForm1自己的Page_load事件中的余下的代码!
// }
protected override void MyFun(){
//do sth……
base.MyFun();
}



相关文档
最新文档