page 的生命周期学习小结(翻译兼笔记)
【程序编程相关:PHP中的类 】原文链接:page events: order and postback 【推荐阅读:OOP 中的双刃剑】
【扩展信息:LINUX 常见问题1000个详细解答(】作者:paul wilson翻译:木野狐初始化(initialization)
页面被请求时,第一个被执行的总是构造函数(constructor). 你可以在这里初始化很多自定义属性或对象.不过这里有一些限制,因为 page 还没有被完全初始化.特别地,你必须使用 httpcontext.current 来访问 querystring, form, cookies 集合,以及 cache 对象.而 session 对象在 constructor 里是无法访问的.
下面接着执行的是 addparsedsubobject 方法,这个方法把组成该 page 的所有子控件添加到控件集合树中.在很多高级的页面模板解决方案中,该方法通常被覆盖,以便把页面的控件添加到一个特殊的页面模板中去.该方法递归的被子控件调用,所有这些子控件都是这时候初始化的,从最里面的开始.
接着是 determinepostbackmode 方法.该方法允许你影响 ispostback 的值,以及相关事件.如果你想从数据库中加载 viewstate 以便 redirect 时,这个可能对你有用.因为 viewstate 仅仅在 ispostback 为 true 的时候被恢复.
你可以通过返回 null 来强制不 postback, 或者返回 request.form 来强制 postback. 这个方法是不推荐使用的,除非是在特殊的情况下,因为他还影响其他的事件.然后是 oninit 方法.通常这是我们使用到的第一个方法.这时,所有控件已经被初始化,也就是说所有原始值都被设定了.而 viewstate 以及所有其他 post 的值还没有被应用到控件上.也就是说这时候所有通过代码或者用户操作做的更改还没有被恢复.这通常是创建或重新创建动态控件的最佳时机.
恢复与加载(restore and load)
接下来的 loadpagestatefrompersistencemedium 方法,仅仅在 postback 时被执行.当你要改变保存 viewstate 的方法时(使用 session 或其他自定义的储存方法),覆盖这个方法,以及后面的 savepagestatetopersistencemedium 方法.注意:该方法并不真正加载 viewstate 到 page 及其子控件.
... 下一页