在Init之前究竟执行了什么?
上面代码的注释说,控件会在加入控件树之前被初始化,因此我们要保证Page不为Null。
我认为:在根据声明语法生成控件树的过程中,执行到此步骤时,控件树已经生成了一部分,即Page在此时不可能为Null,因此不用判断Null。可是跟踪发现Page确实是Null,原因可能是,控件树已经部分生成,Page已经生成。但在此时子控件是不能访问Page的,所以才会是Null。
下面是编译源:
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(0, 377, true));
__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();
}
{
Control control1 = obj as Control;
if (control1 != null)
{
this.Controls.Add(control1);
}
}
可以看到在执行Init前,会编译运行上面自动生成的编译源,这样以来第一个问题就彻底清楚了,也证明我上面的判断是正确的。
在Init之前究竟执行了什么?相关推荐
- IHttpModule.Init方法被执行多次的原因
(http://www.csharpwin.com/dotnetspace/446.shtml) 发现不少朋友跟我一样,错把IHttpModule.Init拿来当做Application_Start的 ...
- 页面事件(Init,Load,PreRender)执行顺序
Init,Load,PreRender事件执行顺序:1)控件的Init事件 2)控件所在页面的Init事件 3)控件所在页面的Load事件 4)控件的Load事件 5)控件所在页面的PreRender ...
- Go: init()执行顺序问题
init()函数会在包被初始化后自动执行,并且在main()函数之前执行,但是需要注意的是init()以及main()函数都是无法被显式调用的. 那么init()是不是最先执行的呢? 答案是否定的,首 ...
- shell公共函数:/etc/init.d/functions
/etc/init.d/functions这个脚本是给/etc/init.d里边的文件使用的,提供了一些基础的功能,看看里边究竟有些什么.首先会设置umask,path,还有语言环境,然后会设置suc ...
- 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...
原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...
- iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...
2019独角兽企业重金招聘Python工程师标准>>> iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.vie ...
- Android 8.1 源码_启动篇(一) -- 深入研究 init(转 Android 9.0 分析)
前言 init进程,它是一个由内核启动的用户级进程,当Linux内核启动之后,运行的第一个进程是init,这个进程是一个守护进程,确切的说,它是Linux系统中用户控件的第一个进程,所以它的进程号是1 ...
- go/golang init()方法的调用
go/golang main() init()方法的调用 u011156212 · 2015-10-20 13:00:05 · 9965 次点击 · 预计阅读时间 1 分钟 · 27分钟之前 开始浏览 ...
- iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view...
iOS视图控制对象生命周期: init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用 ...
最新文章
- intval0.57100 php_php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习
- C#中虚函数,抽象,接口的简单说明
- 未来的全能保姆机器人作文_保姆机器人作文500字
- R语言file_path_sans_ext函数剔除文件后缀实战
- Linux 下 svn 的使用
- MVC的概念及MVC 3.0开发环境
- CVPR 2021 | 澳洲国立大学提出基于模型的图像风格迁移
- 9.28 linux系统基础优化
- Coursera自动驾驶课程第7讲:Vehicle Lateral Control
- Oracle自定义类型
- 利用apache限制IP并发数和下载流量控制
- 基于组织目标采用合适的敏捷方法
- 随机森林算法原理简要总结
- NLP数据集:GLUE【CoLA(单句子分类)、SST-2(情感二分类)、MRPC、STS-B、QQP、MNLI、QNLI、RTE、WNLI】【知名模型都会在此基准上进行测试】
- 360手机卫士linux版,360手机卫士极速版
- C++STL常用算法adjacent_find
- 0x0000050蓝屏srvsys_win7电脑出现蓝屏0x00000050提示srv.sys如何解决
- 计算机系统的位的描述性定义,计算机系统中,“位”的描述性定义是________。
- 英语在线教育机构争战AI风口,为何雷声大雨点小?
- 驾考计算机播报原理,科目三电子路考流程详解 考驾照的都看看!