• 在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前,会编译运行上面自动生成的编译源,这样以来第一个问题就彻底清楚了,也证明我上面的判断是正确的。

  • 相关阅读:
    CSS的三种基本框架
    使用scrapy框架做赶集网爬虫
    JQuery将form表单值转换成json字符串函数
    Bootstrap Modal 使用remote从远程加载内容
    Java获取指定包名下的所有类的全类名的解决方案
    Linux下安装解压版(tar.gz)MySQL5.7
    Log4j2使用笔记
    Log4j使用笔记
    JavaWeb开发中采用FreeMarker生成Excel表格
    Linux下安装jdk+maven +git
  • 原文地址:https://www.cnblogs.com/cxd4321/p/573942.html
Copyright © 2020-2023  润新知