
页面声明周期完整版

1、页面生命周期中,第4步,还有一个过程,找到改变了的控件和点击的控件。它是怎么知道你点击了哪个按钮?根据你提交到后台的按钮Id 来确定。
2、页面加载,也是分为三个步骤:预加载(PreLLoad)、加载(Load)、第二次处理回发数据、加载完成(LoadConplete)
1)第二次处理回发数据:是为了页面加载中,动态创建的控件。Page_Load中动态创建的控件,也会有事件的响应处理。
2)那么我们Page_Load中动态创建的控件能不能触发改变事件 和 事件点击事件呢?也可以触发,在页面生命周期第4步,我们通过第一次处理回发数据,已经找到了改变的控件 和 点击的控件。那么我们Page_Load中创建的控件没有放到对应的集合里面去。所以就有了第二次处理回发数据。
3)第二次处理回发数据:是为了页面加载中,动态创建的控件,也能够享受 文本框改变、点击等这些事件。
3、WebForm中,后台通过代码创建的控件,要显示到前台页面中去,就要将创建的控件添加到页面表单对象的控件集合中去。
eg:TextBox txtBoxAdd = new TextBox();
this.form1.Controls.Add(txtBoxAdd);
4、页面中Page_Load事件先执行,然后再执行控件的事件。从生命周期的第5步和第6步就可以看出。
5、在页面生命周期 第7步,如果还没有改变页面控件状态,后续的步骤就不允许改了,这是最后改变页面控件状态的机会。
6、在页面生命周期 第9步(渲染),把整个aspx页面生成Html的过程。
7、在页面生命周期 第10步(卸载),然后继续回到 管道 流程中,继续第12个事件,以及后续的流程。
8、页面生命周期 第1步,创建页面控件树。
1)网站生成的dll,只有咱们代码后置类生成的代码,没有前台页面生成的类型。前台页面的类型是动态编译的。
2)什么叫动态编译?咱们第一次请请求的时候,它会把这个页面编译成一个类型,动态编译的。
3)我想看这个页面动态编译的类型怎么办?想看这个代码的程序集的话,通过反射拿到这个程序集。通过下述代码,拿到我们当前程序集所在的位置。
eg:string assemblyPath = Assembly.GetExecutingAssembly().Location;
//这个还是咱们生成bin目录下的程序集,只是把它拷贝到了 临时目录中去。
//我们把它写在了后台代码中,拿到的程序集就是后台代码的程序集。
4)我现在想要拿到页面的类型的程序集,其实还是这段代码。咱们在前台页面中写这句C#代码,只不过要在当前页面子类中引入反射的程序集,在前台页面中引入程序集的方法见下述代码【重点,新点】:
eg:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<!-- 引入C#命名空间 -->
<%@ Import Namespace="System.Reflection" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<!-- 查看当前页面子类型,动态生成程序集的位置 -->
<% Response.Write(Assembly.GetExecutingAssembly().Location) %>
</div>
</form>
</body>
</html>





