您的位置:首页 > 编程语言 > ASP

[转].NET (C#) Internals: ASP.NET 应用程序与页面生命周期(意译)

2010-04-30 14:21 489 查看

1、引言

这篇文章我们将试图理解,从用户发送一个请求直到请求呈现到浏览器发生的事件的差异。因此,我们首先将介绍解ASP.NET请求的两个概括的步骤,接下来我们将介绍‘HttpHandler’,‘HttpModule’和ASP.NET页面对象发出的事件的差异。随着我们的事件旅程,我们将理解这些事件的逻辑。

2、两个处理步骤

ASP.NET请求处理可以总结为如下所示的两个处理步骤。用户发送一个请求到IIS:

ASP.NET创建处理请求的环境。换句话说,创建应用程序对象、request、response和context对象去处理请求。
一旦环境已经创建,请求通过使用modules、handlers和page对象的一系列事件处理。为了简化可以称为MHPM(module、handler、page、module event),我们将在后面详细讨论。
HttpModule类[/code]

下面是HttpHandler的代码片段,它跟踪ProcessRequest事件。

HttpHandler代码片段


我们也追踪ASP.NET页面的所有事件。

asp.net页面事件


下面显示上面讨论的所有事件的执行顺序:





5、深入ASP.NET页面事件

在前面部分我们已经知道ASP.NET页面请求的整体事件流,但是我们没有详细讨论,因此本节我们将深入了解。任何ASP.NET页面有2个部分,一个是显示在浏览器上的页面,它有HTML标记、viewstate形式的隐藏值、HTML inputs上的数据。当页面被发送时,在服务器上这些HTML标记被创建到ASP.NET控件且viewstate和表单数据捆绑在一起。一旦你得到这些服务器控件的后台代码,你可以执行和写你自己的逻辑和呈现返回给浏览器。



现在这些HTML控件在服务器上作为ASP.NET控件,ASP.NET页面发出一些事件,我们可以注入自己的逻辑。根据任务/你要执行的逻辑,我们需要把这些逻辑放入适当的事件中。

注意:大部分开发者直接使用Page_Load方法执行一切,这不是一个好的方法。因此,不是填充控件、设置viewstate、应用主题等一切都发生在页面加载上。因此,如果我们能在适当的事件中放入逻辑,将真正使你的代码干净。



SeqEvents控件初始化Viewstate可用表单数据可用什么逻辑可以写在这里?
1InitNoNoNo注意:你可以通过使用ASP.NET请求对象访问表单数据等,但是不是通过服务器控件。
动态地创建控件,如果你一定要在运行时创建;任何初始化设置;母版页及其设置。在这部分中我们没有获得viewstate、postedvalues及已经初始化的控件。
2Load View StateNot guaranteedYesNot guaranteed你可以访问View State及任何同步逻辑,你希望viewstate被推倒后台代码变量可以在这里完成。
3PostBackdataNot guaranteedYesYes捏可以访问表单数据。任何逻辑,你希望表单数据被推倒后台代码变量可以在这里完成。
4LoadYesYesYes在这里你可以放入任何你想操作控件的逻辑,如从数据库填充combox、对grid中的数据排序等。这个事件,我们可以访问所有控件、viewstate、发送的值。
5ValidateYesYesYes如果你的页面有验证器或者你想为你的页面执行验证,那就在这里做吧。
6EventYesYesYes如果这是通过点击按钮或下拉列表的改变的一个回发,相关的事件将被触发。与事件相关的任何逻辑都可以在这里执行。
7Pre-renderYesYesYes如果你想对UI对象做最终的修改,如改变属性结构或属性值,在这些控件保存到ViewState之前。
8Save ViewStateYesYesYes一旦对服务器控件的所有修改完成,可以保存控件数据到View State。
9RenderYesYesYes如果你想添加一些自定义HTML到输出,可以在这里完成。
10UnloadYesYesYes做任何你想做的清理工作。




原文链接:ASP.NET application and page life cycle

另附几篇相关的文章:

DotText源码学习——ASP.NET的工作机制

A low-level Look at the ASP.NET Architecture,对于的译文从底层了解ASP.NET体系结构

作者:吴秦出处:http://www.cnblogs.com/skynet/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: