- 浏览: 149397 次
- 性别:
- 来自: 北京
文章分类
最新评论
1.对象初始化(OnInit方法)
页面中的控件(包括页面本身)都是在它们最初的FORM中被首次初始化的。通过在ASPX页面的后台代码文件的构造器中声明你的对象,页面将知道对象的类 型,并知道需要创建多少个这样的对象。一旦你在构造器中声明了你的控件,你就可以在它的任何子类,方法,事件或者属性中访问到它们。但是,如果你的任何对 象是在ASPX文件中指定的控件,这样的控件是没有属性的。而且这样做对从代码中访问它们是危险的,因为无法保证这些控件实例是按照怎样的顺序被创建的 (假定它们都是能完全被创建的)。初始化事件可以通过OnInit方法重载。
2.加载视图状态数据(LoadViewState事件)
初始化以后,控件仅能通过ID引用(还没有建立用于相对引用的文档对象模型)。 在LoadViewState事件中,已初始化的控件获得第一个属性:上一次提交存留到服务器的视图状态信息。页视图状态通过ASP.NET维护,它被用 于在一个往返行程中存留信息到服务器。视图状态信息被保存为一个名称/值对,它包含控件的如Text和Value一类的信息。视图信息被保存在隐 藏<input>控件的值属性中在页请求中传递。正如你所了解的,这是旧的ASP3.0状态维护技术的一个巨大飞跃。这个事件可以通过 LoadViewState方法重载,往往用来在控件被填充时定制它所接受的数据。
3.处理回传数据(LoadPostData事件)
在创建页的阶段,被发送到服务器端的Form数据(ASP.NET中的术语为回传数据)依照每个控件的数据需求进行处理。当页面提交Form时,框架将在 每个提交数据的控件上实现IPostBackDataHandler接口。页面然后激发LoadPostData事件,通过页面解析发现实现了 IPostBackDataHandler接口的控件,并用正确的回传数据更新控件状态。ASP.NET通过匹配控件的唯一标示符来更新正确的控件,该标 示符具有名称值集合中的名称值对。这也就是在所有特定的页中每个控件都需要一个唯一标示符的原因之一。其它的步骤都由框架来完成,以确定每个标示符在环境 中是唯一的,例如存在于单页面中的自定义用户控件。LoadPostData事件被激发后,RaisePostDataChanged事件就可以随时被执 行了。
4.对象加载(OnLoad方法)
对象在Load事件中获得正确的Form。所有的对象首先都被组织在页DOM(ASP.NET中称为控件树)中,并且很容易通过代码或者相对位置 (crawling the DOM)来引用。然后对象就可以自由的访问HTML中的客户端属性集,例如width,value,或者visibility。加载时,控件逻辑,如算 法、以编程方式设置控件属性、用StringBuilder装配输出字符串都同时被执行。大部分的工作都是在这一阶段完成的。Load 事件能够通过调用OnLoad来重载。
5.激发RaisePostDataChanged 事件
如前所述,这发生在所有实现了IPostBackDataHandler接口的控件被正确的回传数据更新以后。在这个过程中,每个控件都有一个布尔值的标 识,标识其自上一次提交后该控件的数据是被更改还是保持原值。然后ASP.NET通过搜索页来寻找任何显示控件数据被更改的标识并激发 RaisePostDataChanged。RaisePostDataChanged事件直到Load事件发生后,所有控件被更新后才激发。这保证了在 控件被回传数据更新前,其它控件的数据在RaisePostDataChanged事件中没有被手动更改过。
6.处理客户端回传事件(RaisePostBackEvent事件)
当回传更新导致数据改变而引发服务器端事件后,引发回传的对象会在RaisePostBackEvent事件中被处理。这种激发回传的对象往往是其状态改 变而引发回传的控件(其autopostback被启用)或者是一个被点击的窗体提交按钮。很多代码都在这个事件中执行,因为这是控制事件驱动逻辑的理想 位置。为了保证呈现到浏览器的数据的正确性,在一系列的回传事件后RaisePostBackEvent事件最终被激发。基于一致性的考虑,回传中改变的 控件直到这个函数被执行后才被更新。也就是说,被预期事件改变的数据总是在结果页反映出来。RaisePostBackEvent事件可以通过 RaisePostBackEvent来捕捉。
7.对象预呈现(OnPreRender事件)
对象被预呈现的地方对于那些能够保存到视图或者维持其视图状态的对象来说是最后一次有机会改变的地方。这使得预呈现步骤成为做最后修改的理想位置,例如改 变控件属性或改变控件树结构,不用担心因为数据库请求或者视图状态更新而导致对象的变化。预呈现阶段之后,对象改变被锁定并且不能再被保存到页视图状态 中。预呈现阶段可以通过重载OnPreRender实现。
8.保存视图状态(SaveViewState事件)
只有在所有的页面对象的改变都发生后视图状态才被保存。对象状态数据被保存在隐藏<input>对象中,这也是对象状态数据准备呈现到 HTML的地方。在SaveViewState事件中,值能够被保存到视图状态对象中,但页面控件的改变并不能保存到其中。可以通过重载 SaveViewState实现这个步骤。
9.呈现HTML(Render事件)
Render事件通过装配用于浏览器输出的HTML来着手页的创建。在Render事件中,页调用对象使它们呈现为HTML,然后页收集HTML来发送。 当Render事件被重载的时候,开发者可以为浏览器创建定制的HTML,此时页面创建的任何HTML都还没有生效。Render 方法用HtmlTextWriter对象作参数并由它产生HTML给浏览器。这里仍然可以作修改,但是这样的修改只会反映到客户(译者注:意即改变只会在 HTML呈现中反映而视图状态并无法被改变)。Render 事件可以被重载。
10.释放(Dispose事件)
当页面的HTML呈现后,对象被释放。在Dispose事件中,你可以清除任何在页面创建中构造的对象或者引用。在这里,所有的处理都已经被执行,你可以安全的释放任何还存在的对象,包括Page对象。Dispose能被重载。
具体对应的事件顺序如下:
①Page_Init() 对象初始化;
②LoadViewState 加载视图状态;
③LoadPostData 处理回送数据;
④Page_Load() 页面加载;
⑤RaisePostDataChanged 数据更新并回送事件;
⑥RaisePostBackEvent 处理客户端回传的事件;
⑦Page_PreRender()页面预处理;
⑧SaveViewState 保存视图状态;
⑨Page_Render() 呈现Html静态页面;
⑩UnLoad 释放页面;
总结
每次我们请求一个ASP.NET页的时候,这个从初始化到释放的过程都同样的被执行。通过理解ASP.NET页的内部执行过程,编写和调试代码的时候就会更加容易和高效。
下面是具体的代码:
view plaincopy to clipboardprint?
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
#region OnPreInit 第一步
protected override void OnPreInit(EventArgs e)
{
//检查 IsPostBack 属性来确定是不是第一次处理该页。
//创建或重新创建动态控件。
//动态设置主控页。
//动态设置 Theme 属性。
//读取或设置配置文件属性值。
//注意
//如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一事件中被重写。
base.OnPreInit(e);
}
#endregion
#region OnInit 第二步
protected override void OnInit(EventArgs e)
{
//在所有控件都已初始化且已应用所有外观设置后引发。使用该事件来读取或初始化控件属性。
base.OnInit(e);
}
#endregion
#region OnInitComplete 第三步
protected override void OnInitComplete(EventArgs e)
{
//由 Page 对象引发。使用该事件来处理要求先完成所有初始化工作的任务。
base.OnInitComplete(e);
}
#endregion
#region PreLoad 第四步
protected override void OnPreLoad(EventArgs e)
{
//如果需要在 Load 事件之前对页或控件执行处理,请使用该事件。
//在 Page 引发该事件后,它会为自身和所有控件加载视图状态,然后会处理 Request 实例包括的任何回发数据。
base.OnPreLoad(e);
}
#endregion
#region OnLoad 第五步
protected override void OnLoad(EventArgs e)
{
//Page 在 Page 上调用 OnLoad 事件方法,然后以递归方式对每个子控件执行相同操作,如此循环往复,直到加载完本页和所有控件为止。
//使用 OnLoad 事件方法来设置控件中的属性并建立数据库连接。
base.OnLoad(e);
}
#endregion
#region 控件事件 第六步
protected void Button1_Click(object sender, EventArgs e)
{
//用这些事件来处理特定控件事件,如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。
//注意
//在回发请求中,如果页包含验证程序控件,请在执行任何处理之前检查 Page 和各个验证控件的 IsValid 属性。
}
#endregion
#region OnLoadComplete 第七步
protected override void OnLoadComplete(EventArgs e)
{
//对需要加载页上的所有其他控件的任务使用该事件。
base.OnLoadComplete(e);
}
#endregion
#region OnPreRender 第八步
protected override void OnPreRender(EventArgs e)
{
//在该事件发生前:
//Page 对象会针对每个控件和页调用 EnsureChildControls。
//设置了 DataSourceID 属性的每个数据绑定控件会调用 DataBind 方法。有关更多信息,请参见下面的数据绑定控件的数据绑定事件。
//页上的每个控件都会发生 PreRender 事件。使用该事件对页或其控件的内容进行最后更改。
base.OnPreRender(e);
}
#endregion
#region SaveStateComplete 第九步
protected override void OnSaveStateComplete(EventArgs e)
{
//在该事件发生前,已针对页和所有控件保存了 ViewState。将忽略此时对页或控件进行的任何更改。
//使用该事件执行满足以下条件的任务:要求已经保存了视图状态,但未对控件进行任何更改。
base.OnSaveStateComplete(e);
}
#endregion
#region Render 第十步
//Render
//这不是事件;在处理的这个阶段,Page 对象会在每个控件上调用此方法。所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。
//如果创建自定义控件,通常要重写此方法以输出控件的标记。不过,如果自定义控件只合并标准的 ASP.NET Web 服务器控件,不合并自定义标记,则不需要重写 Render 方法。有关更多信息,请参见开发自定义 ASP.NET 服务器控件。
//用户控件(.ascx 文件)自动合并呈现,因此不需要在代码中显式呈现该控件。
#endregion
#region OnUnload 第十一步
protected override void OnUnload(EventArgs e)
{
//该事件首先针对每个控件发生,继而针对该页发生。在控件中,使用该事件对特定控件执行最后清理,如关闭控件特定数据库连接。
//对于页自身,使用该事件来执行最后清理工作,如:关闭打开的文件和数据库连接,或完成日志记录或其他请求特定任务。
//注意
//在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 Response.Write 方法),则该页将引发异常。
base.OnUnload(e);
}
#endregion
}
发表评论
-
asp.net导出csv的例子
2012-10-26 14:35 3397http://wiki.asp.net/page.aspx ... -
在Visual Studio 2010中使用Visual Leak Detector
2012-10-26 14:08 830http://blog.csdn.net/xinyaping/ ... -
[科普小短文]在C#中调用C语言函数 (Linux & Mono版) 转
2012-10-26 13:57 1393http://blog.csdn.net/xinyaping/ ... -
在 Visual Studio 2012 中创建 ASP.Net Web Service 转
2012-10-26 13:53 1206http://blog.csdn.net/xinyaping/ ... -
Example: Receive HTTP Post via ASP.Net Generic Handler 转
2012-10-26 13:41 1110假设我们要提供一个小小的服务,采用HTTP协议进行通讯,客 ... -
错误时捕获和响应错误
2012-10-24 20:49 906ASP.NET 提供三种用于在出现错误时捕获和响应错误的主 ... -
asp.net 中的错误跳转 customerrors 对html文件不起作用 转载
2012-10-24 20:08 1358一般对于asp.net的网 ... -
ASP.NET自定义错误页面
2012-10-24 20:06 786ASP.NET 提供三种用于在出现错误时捕获和响应错误的主 ... -
ASP.NET页面错误处理及邮件发送简易方案
2012-10-18 16:58 8921包含页面:Default.aspx,Error.aspx ... -
ASP.NET中缓存(cache)的控制方法
2012-10-18 13:30 1504... -
asp.net 格式化时间日期
2012-10-17 15:59 1171asp.net 格式化时间日期 ...
相关推荐
能很直观的了解ASP.NET 2.0页面执行顺序
以下是ASP.NET页面加载顺序的详细解释: 1. **初始化阶段**: - **构造函数**:在页面被请求时首先调用,用于初始化自定义属性或对象。此时,可以访问`HttpContext`对象,如`QueryString`、`Form`、`Cookies`和`...
了解这些事件的执行顺序对编写高效且健壮的ASP.NET应用程序至关重要。在编写事件处理程序时,开发者可以根据这个顺序来决定何时添加逻辑,以确保数据正确加载、控件正确初始化,以及在页面呈现前完成所有必要的操作...
ASP.NET页面生命周期是ASP.NET应用程序开发中的核心概念,它描述了从用户请求页面到服务器响应完成的整个过程。了解这个生命周期对于高效、准确地编写ASP.NET代码至关重要。 1. **初始化对象** 在页面生命周期的...
页面生命周期是ASP.NET页面对象模型的核心概念,包括一系列事件,如初始化、加载、回发数据、验证、呈现和卸载。这些事件提供了开发者介入和控制页面行为的机会。例如,`Page_Load`事件用于在页面加载时执行特定...
在Asp.Net技术的学习过程中,对于初学者来说,掌握正确的学习顺序至关重要,这不仅可以提高学习效率,还能确保对各个知识点的深入理解。以下是一个详细且系统化的Asp.Net技术学习路径,供你参考: 1. **基础知识**...
通常情况下,这是在ASP.NET页面生命周期中的`Page_Load`方法中完成的。有两种主要的方法来实现这一点:`Page.RegisterStartupScript` 和 `ScriptManager.RegisterClientScriptBlock`。 - **Page....
ASP.NET页面生命周期同样复杂,每个页面在被请求时都会经历一系列步骤。以下是页面生命周期的主要阶段: 1. 浏览器请求:浏览器向服务器发送请求,可能包含POST数据。 2. 页面框架初始化:ASP.NET创建页面对象,初始...
代码如下: #region 控件... //注意 //在回发请求中,如果页包含验证程序控件,请在执行任何处理之前检查 Page 和各个验证控件的 IsValid 属性。 } #endregion #region OnLoadComplete 第七步 protected override void O
ASP.NET页面生命周期是ASP.NET Web Forms开发中的核心概念,它描述了一个ASP.NET页面从请求开始到响应返回给客户端的整个过程。在这个过程中,页面会经历一系列的阶段,每个阶段都有其特定的任务和目的,允许开发者...
8. **页面生命周期和事件传播**:理解ASP.NET页面的生命周期对于优化性能和解决问题至关重要。PPT将解释各个阶段,如初始化、加载、回发等,以及事件传播顺序。 9. **部署和调试**:学习如何将ASP.NET应用程序部署...
以下是对ASP.NET页面周期的详细阐述: 1. **初始化阶段 (Initialization)**:在这个阶段,页面对象被创建,控件树被构造,控件的属性值被恢复(如果之前已保存)。这是可以修改控件属性或添加新控件的最早时机,但...
asp.net 开发 OA 系统中的报销多级审批工作流(顺序工作流) 工作流是一个软件系统中的一个非常重要的组件,它可以帮助我们自动化许多业务流程,从而提高工作效率和降低成本。在 asp.net 开发 OA 系统中,工作流...
- HttpHandler(或IHttpHandler)是实际处理HTTP请求的对象,它可以是ASP.NET页面、Web服务或其他自定义的处理程序。HttpHandler接收HTTP请求,生成响应内容,并通过HttpWriter返回给客户端。 - ...
压缩包中的“BBS论坛”文件可能包含了整个项目的源代码结构,包括ASP.NET页面、样式表、脚本文件、配置文件、数据库脚本等。开发者可以通过查看这些文件了解系统的实现细节,学习如何在ASP.NET环境下构建一个完整的...
以下是对Asp.NET页面事件加载顺序的详细解释: 1. **单独的Page事件顺序**: - `Page.PreInit`:这是页面生命周期的第一个事件,允许在此阶段设置控件属性,例如设置MasterPage。 - `Page.Init`:在此阶段,所有...
当用户请求一个ASP.NET页面时,一系列事件会按顺序发生,包括初始化、加载、验证、呈现和卸载。开发者可以利用这些事件处理程序来编写代码,控制页面的行为。 在 ASP.NET 中,表单(Form)和控件(Control)是构建...
1. 在ASP.NET页面设计视图中,从工具箱中拖放Wizard控件到设计表面板上。 2. 配置向导控件的属性,如宽度、高度、标题、导航样式等。在用户注册示例中,可能需要自定义标题以反映注册过程。 3. 添加步骤...
此外,还会学习ASP.NET页面生命周期和事件模型,这是理解代码执行顺序的关键。 2. **控件与Web Forms**:ASP.NET Web Forms是开发Web应用程序的一种方式,它提供了一系列服务器控件,如Button、TextBox等,使得开发...