自定义Web页面基类的PageLoad事件和web页面自己的PageLoad的执行先后
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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();
}