当前位置:编程学习 > asp >>

.net深入体验与实战精要--ASP.NET开发大杂烩

正巧今天遇到一个获取动态生成table中的一个动态生成的TextBox的值的时候总是findcontrol不到。后来经过我们的徐总,瞬间解决,但是我觉得对于一个页面的声明周期,我了解的还是很少,今天希望能通过这篇文章,再次了解一遍。
 
3.1页面生命周期
3.1.1独立页面生命周期事件顺序
 
 public partial class _Default : System.Web.UI.Page
    {
        protected void Page_PreInit(object sender, EventArgs e)
        {
            Response.Write("Page_PreInit<br/>");
        }
        protected void Page_Init(object sender, EventArgs e)
        {
            Response.Write("Page_Init<br/>");
 
        }
        protected void Page_InitComplete(object sender, EventArgs e)
        {
            Response.Write("Page_InitComplete<br/>");
 
        }
        protected void Page_PreLoad(object sender, EventArgs e)
        {
            Response.Write("Page_PreLoad<br/>");
 
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("Page_Load<br/>");
 
        }
        protected void Page_LoadComplete(object sender, EventArgs e)
        {
            Response.Write("Page_LoadComplete<br/>");
 
        }
        protected void Page_PreRender(object sender, EventArgs e)
        {
            Response.Write("Page_PreRender<br/>");
 
        }
        protected void Page_PreRenderComplete(object sender, EventArgs e)
        {
            Response.Write("Page_PreRenderComplete<br/>");
 
        }
        protected void Page_SaveStateComplete(object sender, EventArgs e)
        {
            Response.Write("Page_SaveStateComplete<br/>");
 
        }
        protected void Page_Unload(object sender, EventArgs e)
        {
            //Response.Write("Page_Unload<br/>");
            int i = 0;
            i++;//这行代码是用来设置断点的,这里不能用Response.Write
        }
 
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write("Button事件触发!<br/>");
        }
    }
 
输出结果:
 
 
Page_PreInit
Page_Init
Page_InitComplete
Page_PreLoad
Page_Load
Page_LoadComplete
Page_PreRender
Page_PreRenderComplete
Page_SaveStateComplete
 
这就是独立页面的执行顺序,但我点击Button按钮的时候页面会进行Postback并重新加载页面,这个过程事件顺序:
 
 
Page_PreInit
Page_Init
Page_InitComplete
Page_PreLoad
Page_Load
Button事件触发!
Page_LoadComplete
Page_PreRender
Page_PreRenderComplete
Page_SaveStateComplete
 
这部分虽然很简单,但是在我们获取页面控件或者相关值的时候,常常找不到控件,很大一部分原因是因为没有了解页面的生命周期事件顺序
 
3.1.2具有Master页的声明周期事件顺序
当页面有Master页的时候,将上面代码分别复制到Site.Matster和ContentPage.aspx,再次执行ContentPage.aspx会看到如下结果:
 
 
Page_PreInit
MasterPage_Init
Page_Init
Page_InitComplete
Page_PreLoad
Page_Load
MasterPage_Load
Page_LoadComplete
Page_PreRender
MasterPage_PreRender
Page_PreRenderComplete
Page_SaveStateComplete
 
当点击按钮的时候
 
 
Page_PreInit
MasterPage_Init
Page_Init
Page_InitComplete
Page_PreLoad
Page_Load
MasterPage_Load
Button事件触发!
Page_LoadComplete
Page_PreRender
MasterPage_PreRender
Page_PreRenderComplete
Page_SaveStateComplete
 
3.1.3APS.NET声明周期详解
 
网页事件
 
典型的使用方式
 
PreInit
 
PreInit事件是网页生命周期中非常早起的一个事件,在PreInit事件触发之后,就会加载用户设置信息与网页主题。我们通常使用PreInit事件来执行下列处理:
 
l         检查IsPostBack属性,来确认网页是否为第一次被处理。
 
l         创建或重新创建动态控件。
 
l         动态设置一个母版页。
 
l         动态设置Theme属性。
 
l         读取或设置用户设置文件属性值。
 
Init
 
在所有的控件都已经被初始化,而且所有的面板设置都已经应用之后,就会触发Init事件。可以使用此事件来读取或初始化控件属性。
 
InitComplete
 
此事件由Page对象触发。当网页初始化完成之后,就会触发此事件。
 
PreLoad
 
如果希望在Load事件触发之前,针对您的网页或控件执行一些处理,就可以使用此事件。在Page触发此事件之后,它会加载它本身与所有控件的视图状态,然后处理Request实例的回发数据。
 
Load
 
Page会调用Page上的Load事件处理例程,然后按照顺序为每一个子控件执行相同的操作,直到网页与所有控件被加载为止。我们通常会使用Load事件来设置控件的属性并创建数据库连接。
 
控件事件
 
我们通常使用控件的各个事件来完成各项互动操作。
 
LoadComplete
 
在网页上的所有其他控件都已经被加载之后,要执行的处理就可以通过此事件来完成。
 
PreRender
 
在控件已经被加载但是还没有解释之前,就会触发此事件。在此事件之前会执行下列操作:
 
l         Page对象会调用网页与每一个控件的EnsureChildControls方法。
 
l         DataSo
补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,