在Init之前究竟执行了什么?

本文解析了Web控件树的构建过程,特别是控件初始化阶段的行为。通过源代码分析,明确了控件及其子控件在加入控件树时的状态及初始化逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我认为:会实例化子控件并且把他们加入控件树
上面代码的注释说,控件会在加入控件树之前被初始化,因此我们要保证Page不为Null。
我认为:在根据声明语法生成控件树的过程中,执行到此步骤时,控件树已经生成了一部分,即Page在此时不可能为Null,因此不用判断Null。可是跟踪发现Page确实是Null,原因可能是,控件树已经部分生成,Page已经生成。但在此时子控件是不能访问Page的,所以才会是Null。
下面是编译源:
1126521.gif1126520.gif private System.Web.UI.Control __BuildControlForm1() 1126525.gif{
1126526.gif               System.Web.UI.HtmlControls.HtmlForm __ctrl;         
1126526.gif               __ctrl 
= new System.Web.UI.HtmlControls.HtmlForm();              
1126526.gif               
this.Form1 = __ctrl;             
1126526.gif               __ctrl.ID 
= "Form1";           
1126526.gif               __ctrl.Method 
= "post";              
1126526.gif               System.Web.UI.IParserAccessor __parser 
= ((System.Web.UI.IParserAccessor)(__ctrl));              
1126526.gif               __parser.AddParsedSubObject(
new System.Web.UI.LiteralControl("\r\n\t\t\t"));              
1126526.gif               
this.__BuildControlPageTracker3();              
1126526.gif               __parser.AddParsedSubObject(
this.PageTracker3);                             
1126526.gif               __parser.AddParsedSubObject(
new System.Web.UI.LiteralControl("\r\n\t\t\t\t"));            
1126526.gif               
this.__BuildControlButton1();             
1126526.gif               __parser.AddParsedSubObject(
this.Button1);             
1126526.gif               __parser.AddParsedSubObject(
new System.Web.UI.LiteralControl("\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t"));              
1126526.gif               
return __ctrl;
1126529.gif           }

1126522.gif           
1126521.gif1126520.gif           
private void __BuildControlTree(System.Web.UI.Control __ctrl) 1126525.gif{
1126526.gif               System.Web.UI.IParserAccessor __parser 
= ((System.Web.UI.IParserAccessor)(__ctrl));            
1126526.gif               __parser.AddParsedSubObject(
this.CreateResourceBasedLiteralControl(0377true));            
1126526.gif               __parser.AddParsedSubObject(
new System.Web.UI.LiteralControl("\r\n\t</HEAD>\r\n\t<body>\r\n\t\t"));           
1126526.gif               
this.__BuildControlForm1();             
1126526.gif               __parser.AddParsedSubObject(
this.Form1);              
1126526.gif               __parser.AddParsedSubObject(
new System.Web.UI.LiteralControl("\r\n\t</body>\r\n</HTML>\r\n"));              
1126529.gif           }

1126522.gif           
1126521.gif1126520.gif           
protected override void FrameworkInitialize() 1126525.gif{
1126526.gif               SetStringResourcePointer(ASP.WebForm1_aspx.__stringResource, 
377);
1126526.gif               
this.__BuildControlTree(this);
1126526.gif               
this.FileDependencies = ASP.WebForm1_aspx.__fileDependencies;
1126526.gif               
this.EnableViewStateMac = true;
1126526.gif               
this.Request.ValidateInput();
1126529.gif           }

 

1126522.gifprotected virtual void AddParsedSubObject(object obj)
1126521.gif1126520.gif
1126525.gif{
1126526.gif      Control control1 
= obj as Control;
1126526.gif      
if (control1 != null)
11265226.gif11265227.gif      
1126525.gif{
1126526.gif            
this.Controls.Add(control1);
11265234.gif      }

1126529.gif}

1126522.gif
1126522.gif 
1126522.gif

可以看到在执行Init前,会编译运行上面自动生成的编译源,这样以来第一个问题就彻底清楚了,也证明我上面的判断是正确的。

转载于:https://www.cnblogs.com/cxd4321/archive/2006/11/27/573942.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值