当一个获取网页的请求(可能是通过用户提交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件。
ASP.NET页面初始的过程:
1.Page_Init();
2.Load ViewState;
3.Load Postback data;
4.Page_Load();
5.Handle control events;
6.Page_PreRender();
7.Page_Render();
8.Unload event;
9.Dispose method called;
下面是详细描述:
1. Page_Init(); 初始化对象
这个过程主要是初始化控件,每次页面载入执行这个初始过程,包括第一次和以后的Postback。在这里可以访问控件,但是这里面的控件值不是我们期待的控件里面的值,而是一个控件的初始值(默认值)。比如,一个TextBox1,我们填入了“哈哈”,在点击submit提交了页面后,在Page_Init()里面,我们访问到的TextBox1.Text不是“哈哈”,而是开始的""空字符串,如果TextBox1在我们设计的时候提供了默认值,这里访问到的也就是提供的默认值。
对应的事件: Page.Init
2. Load ViewState 导入ViewState数据
这个过程是载入ViewState和Postback数据。比如上面的TextBox1,这个时候就赋了“哈哈”,所以,在Post_Init()对控件赋值是无意义的,它都会在这个过程被改写,当然第一次页面载入例外,因为没有ViewState数据。
在初始化事件后,所有控件只可以通过它们的ID被引用访问(因为还没有相应的DOM可使用)。在Load ViewState这个事件中,所有的控件将获得它们的第一个属性:ViewState属性,这个属性最终将被返回给服务器,以判断这个页面是已经被用户访问完毕还是仍然在被用户所访问。
ViewState属性以“名称/值”对的字符串方式被保存,它包含了控件的文本以及值等信息,该属性被存储在一个隐藏的控件的值属性里,在请求页面时被传递。
3. Load Postback data;
Postback可以理解成用户提交表单数据,在页面创建的这个阶段,服务器对页面上的控件提交的表单数据(Postback数据)进行处理。
4. Page_Load();
这个过程也是每次页面载入时一定会执行的。这里一般都会用到Page.IsPostBack来指示,该页面是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。
在Load事件中,对象都被实例化了。所有的对象第一次被布置在DOM页面(在ASP.NET中称控件树)里了,并且可以通过代码或是相关的位置被引用。这样,对象就可以很容易的从客户端获得诸如宽度、高度、值、可见性等在Html中的属性值。在Load事件中,当然还有像设置控件属性等操作的发生。这个过程是整个ASP.NET页面生命周期中最重要、最主要的。可以通过调用OnLoad来重载Load事件。
对应的事件: Page.Load
5. Handle control events;
在这个过程中,相应具体的控件事件。每个控件都被赋予一个布尔值来标识该控件有没有被更新,然后ASP.NET就在整个页面上寻找任何已被更新过的控件并执行RaisePostDataChanged事件操作,不过,这个事件是在所有的控件都被更新了以及Load事件完成后才进行的,这样就保证了一个控件在被Postback数据更新前,别的控件在RaisePostDataChanged事件中是不会被手动改变的。
6. Page_PreRender(); 预先呈递对象
在这里能对控件属性等等要呈现给用户的数据进行修改,也是最后的修改,以前的修改都可能被覆盖。
可以通过OnPreRender来重载这一步。
做完了这一步,还会进行一个操作就是保存状态SaveViewState,可以用SaveViewState来重载这一步,但是不能对控件的属性等进行修改了。
对应的事件:Page.PreRender
7. Page_Render(); 呈递给Html
在Render事件过程中,页面调用其中的对象将它们呈递给Html,然后,页面就可以以Html的形式被用户访问了。
可以重载Render事件。当Render事件被重载时,开发者可以编写自定义的Html代码使得原先生成的Html都无效而按照新的Html来组织页面。这时所做的修改,只是客户端的变化而已。
对应的事件:Page.Render
8. Unload event
当服务器请求一个对象的时候,就会在内存里生成一个继承页面对象,也就是页面的类,它继承自System.Web.UI.Page. 当页面对象从内存中卸载时,将触发该事件。
对应的事件:Page.Unload
9. Dispose method called
在呈递给Html完成后,所有的对象都应被销毁。可以重载Dispose事件。
对应的事件:Page.Dispose