欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2025/3/16 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 在Init之前究竟执行了什么? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
我认为:会实例化子控件并且把他们加入控件树
上面代码的注释说,控件会在加入控件树之前被初始化,因此我们要保证Page不为Null。
我认为:在根据声明语法生成控件树的过程中,执行到此步骤时,控件树已经生成了一部分,即Page在此时不可能为Null,因此不用判断Null。可是跟踪发现Page确实是Null,原因可能是,控件树已经部分生成,Page已经生成。但在此时子控件是不能访问Page的,所以才会是Null。
下面是编译源:
 private System.Web.UI.Control __BuildControlForm1() {
               System.Web.UI.HtmlControls.HtmlForm __ctrl;         
               __ctrl 
= new System.Web.UI.HtmlControls.HtmlForm();              
               
this.Form1 = __ctrl;             
               __ctrl.ID 
= "Form1";           
               __ctrl.Method 
= "post";              
               System.Web.UI.IParserAccessor __parser 
= ((System.Web.UI.IParserAccessor)(__ctrl));              
               __parser.AddParsedSubObject(
new System.Web.UI.LiteralControl("\r\n\t\t\t"));              
               
this.__BuildControlPageTracker3();              
               __parser.AddParsedSubObject(
this.PageTracker3);                             
               __parser.AddParsedSubObject(
new System.Web.UI.LiteralControl("\r\n\t\t\t\t"));            
               
this.__BuildControlButton1();             
               __parser.AddParsedSubObject(
this.Button1);             
               __parser.AddParsedSubObject(
new System.Web.UI.LiteralControl("\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t"));              
               
return __ctrl;
           }

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

           
           
protected override void FrameworkInitialize() {
               SetStringResourcePointer(ASP.WebForm1_aspx.__stringResource, 
377);
               
this.__BuildControlTree(this);
               
this.FileDependencies = ASP.WebForm1_aspx.__fileDependencies;
               
this.EnableViewStateMac = true;
               
this.Request.ValidateInput();
           }

 

protected virtual void AddParsedSubObject(object obj)
{
      Control control1 
= obj as Control;
      
if (control1 != null)
      
{
            
this.Controls.Add(control1);
      }

}


 

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

总结

以上是生活随笔为你收集整理的在Init之前究竟执行了什么?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。