1. IsPostBack
IsPostBack是Page类的一个属性,一般放在Page_Load事件中。当页面第一次打开时其值为False,若当页面为一个提交后的页面其值为True。
2. 编译原理
Ø 动态编译
当用户首次请求资源时,将动态编译ASP.net网页和代码文件。第一次编译页和代码文件后,会缓存编译后的资源,这将大大提高随后对同一页提出请求的效率。动态编译会平均延长用户的初始响应时间。
对动态编译文件的任何更改都会自动使文件的缓存编译程序集无效,并触发虽有受影响的资源的重新编译。
动态编译是按需编译的,ASP.net只会编译和当前Request相关的aspx和code。
动态编译是基于某个目录的,也就是说ASP.net会把被请求的page所在的目录的所有需要编译的文件进行编译,并生成一个程序集。
Ø 预编译
由于页和代码文件在第一次被请求时无需编译,因此可以缩短对用户的响应时间。这对于更新频繁的大型网站尤为有用。
可以创建站点的已编译版本,并将该版本部署到成品服务器,而无需使用源代码。
在执行就地预编译时,将编译所有ASP.net文件类型,HTML文件,图形和其他非ASP.NET静态文件将保持原状,预编译过程的逻辑与ASP.NET进行动态编译时所用的逻辑相同,说明了文件之间的依赖关系。
3. Code-Behind
ASP.NET 2.0 Framework中,代码隐藏页面的两个部分是部分类与继承关系的联合,而ASP.net 1.x中,代码隐藏页面的两个部分是一种继承关系。好处:无需在.cs文件中声明控件。
4. AutoEventWireup
指示页的事件是否自动绑定。如果启动了事件自动绑定,则为true,否则为false。默认是true。
Asp.net页会引发诸如Init, Load, PreRender等生命周期事件。默认情况下,可以使用Page_事件名称的命名约定将页事件绑定到方法。编译时,ASP.NET将查找基于此命名约定的方法,并自动执行事件与方法之间的绑定。可以对Page类公开的任何事件使用Page_事件名称的约定。
AutoEventWireup属性的缺点是它要求页事件处理程序具有特定的,可预测的名称。这就限制了在命名事件处理程序方面的灵活性。
页事件的显式绑定:
(AutoEventWireup属性设置为false时,将不会按命名约定去调用Page_Load方法,这时需要我们显式绑定)
publicpartialclass_Default:System.Web.UI.Page
{
public_Default()
{
this.Load+=newEventHandler(Page_Load);
}
protectedvoidPage_Load(objectsender,EventArgse)
{
}
}
5. ASP.NET页面生命周期
阶段 |
说明 |
事件 |
页请求 |
页请求发生在页生命周期开始之前。用户请求页时,ASP.net将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。 |
|
启动 |
在启动阶段,将设置页属性,如Request和Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性。页还设置UICulture属性。 |
|
|
|
PreInit |
初始化 |
也初始化期间,可以使用页中的控件,并将设置每个控件的UniqueID属性。如果需要,还会向页应用于母版页和主页。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。 |
Init |
InitComplete |
||
加载 |
加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。 |
PreLoad |
Load |
||
回发事件处理 |
如果请求是回发请求,则将调用控件事件处理程序。之后,将调用所有验证程序控件的Validate方法,此方法将设置各个验证程序控件和页的IsValid属性。 |
控件事件 |
LoadComplete |
||
|
|
PreRender |
PreRenderComplete |
||
SaveStateComplete |
||
呈现 |
在呈现之前,会针对该页和所有控件保存视图状态。在呈现阶段中,页会正对每个控件调用Render方法。 |
Render方法 |
卸载 |
完全呈现页并已将页发送到客户端,准备丢弃该页后,将引发Unload事件。此时,将卸载页属性(如Response和Request)并执行清理。 |
Unload |
各个控件的Init事件在页的Init事件之前发生。各个控件的Load事件在页的Load事件之后发生。
6. ASP.net的工作原理
Ø 客户请求Web页
Ø IIS接收请求寻找指令文件(.aspx)
Ø ASP.Net代码被发送给CLR进行编译
Ø 以HTML流的形式返回给浏览器和指令
Ø 浏览器处理HTML并显示页面
7. ASP.net应用程序生命周期
Ø 用户从Web服务器请求应用程序资源
IIS对所请求文件的文件扩展名进行检查,确定由哪个ISAPI扩展处理该请求,然后将该请求传递给合适的ISAPI扩展。
如果文件扩展名尚未映射到ASP.net,则ASP.NET将不会接受该请求。
Ø ASP.net接收对应用程序的第一个请求
ApplicationManager类创建一个应用程序域。在应用程序域中,创建HostingEnvironment类的一个实例,该实例提供对有关应用程序的信息的访问。
如果需要,ASP.net还可对应用程序中的顶级项进行编译,其中包括App_Code文件夹中的应用程序代码。
Ø 为每个请求创建ASP.net核心对象
初始化HttpContext,HttpRequest和HttpResponse
创建HttpApplication类的实例启动应用程序
创建所有已配置的模块
Ø 将HttpApplication对象分配给请求
Ø 由HttpApplication管线处理请求
对请求进行验证,检查浏览器发送的信息,根据所请求资源的文件扩展名选择实现IHttpHandler的类。