



















1、该文档不包含其他附件(如表格、图纸),本站只保证下载后内容跟在线阅读一样,不确保内容完整性,请务必认真阅读。
2、有的文档阅读时显示本站(www.woc88.com)水印的,下载后是没有本站水印的(仅在线阅读显示),请放心下载。
3、除PDF格式下载后需转换成word才能编辑,其他下载后均可以随意编辑、修改、打印。
4、有的标题标有”最新”、多篇,实质内容并不相符,下载内容以在线阅读为准,请认真阅读全文再下载。
5、该文档为会员上传,下载所得收益全部归上传者所有,若您对文档版权有异议,可联系客服认领,既往收入全部归您。
务所收到的对页面的每个请求都被移交给管线。
管线由系列托管对象组成,这些对象按顺序处理该请求,并完成从到普通文本的转换。
管线的入口点是类。
基础结构为辅助进程中所承载的每个创建此类的个实例请注意,该辅助进程为当前正在运行的每个应用程序维护个不同的。
类从内部池中选取个对象,并让其处理该请求。
应用程序管理器所完成的主要任务就是找出将实际处理该请求的类。
如果请求资源,则处理程序就是个页面处理程序即个继承自的类的个实例。
资源类型和处理程序类型之间的关联关系存储于该应用程序的配置文件中。
更准确地说,在文件的部分中定义默认的组映射关系。
然而,应用程序也可以在本地的文件中自定义自己的处理程序列表。
下面的程序行举例说明了定义用于资源的处理程序的代码。
扩展名可关联到个处理程序类,或者更普遍地关联到个处理程序工厂类。
在所有情况下,负责处理请求的对象都会获得个实现接口的对象。
如果根据处理程序来解析关联资源类,那么所返回的类将直接实现该接口。
如果资源绑定到处理程序工厂,则需要另外个步骤。
处理程序工厂类实现接口,而该接口的方法返回个基于的对象。
运行时如何能完成整个循环并处理页面请求呢接口特别提供了方法。
通过对代表所请求页面的对象调用此方法,基础结构启动相应过程,从而针对浏览器生成输出。
真正的类特定页面的处理程序类型取决于。
当首次调用时,将构建个新类并将该类动态地编译成个程序集。
用于检查来源的语法分析过程的输出结果就是该类的源代码。
该类被定义为命名空间的部分,并被赋予个与原始相似的名称。
例如,如果终结点是,则类名称为。
但是,也可通过编程设置指令的属性来控制类的名称。
处理程序的基类是。
此类定义了所有页面处理程序所共享的方法和属性的最小集合。
类中实现接口。
在些情况下,实际处理程序的基类并非,而是个不同的类。
例如,如果使用了代码隐藏,就会出现这种情况。
代码隐藏是种开发方法,它将页面所需的代码封装到个单独的或类中。
页面的代码就是组事件处理程序和帮助器方法,用以实际创建该页面的行为。
可以利用标记将这种代码定义为内联代码,或者也可将其放到个外部类代码隐藏类中。
代码隐藏类是种继承自的类,但这种类具有些额外的方法因而比较特殊。
如果指定,代码隐藏类就用作处理程序的基类。
还有种情况,即当应用程序配置文件的部分中重新定义了属性时,处理程序也不是基于的。
属性指出了包含页面处理程序的基类的类型以及程序集。
派生自的这个类可自动给处理程序赋予组自定义和扩展的方法和属性。
页面生存周期旦完全确定页面处理程序类,运行时就调用该处理程序的方法以处理请求。
通常情况下,无需更改此方法的实现方式,因为它是由类提供的。
此实现方法开始就调用方法,以此建立页面的控件树。
此方法是类类本身就是从该类派生出来的的个受保护的虚拟成员。
任何针对资源而动态生成的处理程序都重写。
在此方法中,该页面的完整控件树得以构建。
接下来,使该页面经历若干阶段初始化,加载视图状态信息和回发数据,加载页面的用户代码并执行回发服务器端事件。
随后,该页面进入呈现模式收集更新后的视图状态生成代码然后将其发送到输出控制台。
最后,卸载页面,并认为已完成对该请求的处理。
在各个阶段中,页面都会激发些控件和用户定义的代码所能截获并处理的事件。
其中的些事件是嵌入式控件专用的,因而并不能在代码级进行处理。
如果页面想要处理个事件,它应该显式框控件的文本,则该控件激发事件。
如果利用来自客户端的值对该控件的个或多个属性进行修改,每个控件可以决定激发个适当的事件。
对控件而言,如果这些更改是至关重要的,则这些控件实现接口,在事件之后立即调用该接口的方法。
通过编写方法的代码,个控件可以确认自最近次请求以来是否发生了任何关键的更改,并激发自己的更改事件。
页面生存周期内的关键事件就是它被调用来执行与客户端上所激发的个事件相关联的服务器端代码。
当用户单击个按钮时,页面回发数据。
已发送值的集合中包含该按钮该按钮启动整个操作的。
如果已知该控件实现了接口按钮和链接按钮将实现此接口,则页面框架调用方法。
此方法所进行的操作取决于相应控件的类型。
对于按钮和链接按钮,此方法查找事件处理程序并运行相关的委托。
在处理回发事件后,页面就准备进行呈现。
这阶段的标志是事件。
各个控件可利用这个很好的时机,以便执行任何需要在保存视图状态和呈现输出结果的前刻完成的最后些更新操作。
下个状态为,在这状态中所有控件以及页面本身可以刷新自己的集合的内容。
所得到的视图状态随后得以序列化进行哈希运算进行编码并关联到隐藏字段。
通过重写方法,即可更改各个控件的呈现机制。
该方法获取个编写器对象,并使用该对象聚集所有将针对该控件生成的文本。
类的方法的默认实现方式包括对所有成员控件的递归调用。
对于每个控件,页面都调用方法并将输出放入高速缓存。
个页面的最后生存标志就是事件,该事件在页面对象被解除之前发生。
在此事件中,您应该释放可能占用的任何关键资源例如,文件图形对象数据库连接。
终于,在此事件之后,浏览器收到响应数据包并显示页面。
小结页面对象模型由于使用了事件机制而特别具有创新意义。
页面由各种控件构成,这些控件既形成个丰富的基于的用户界面,又通过事件与用户进行交互。
在应用程序的上下文中建立事件模型是项极具挑战性的任务。
令人惊奇的是,利用服务器端代码可以处理客户端生成的事件,而且这种方法的输出看起来与页面相同,只是经过了适当的修改。
要掌握这个模型,重要的点是要理解页面生存周期中的不同阶段,以及运行时如何实例化和使用页面对象。
源码下载及讨论地址地注册相应的处理程序。
然而,为了向后兼容早期的编程风格,也支持种隐式的事件挂起形式。
在默认情况下,页面将尝试把特定的方法名与事件匹配起来如果找到匹配的方法,就认为该方法是该事件的处理程序。
提供了六个方法名的特定识别。
它们是和。
这些方法被当作是类所提供的相应事件的处理程序。
运行时将自动把这些方法与页面事件绑定起来,这样来,开发人员就不必编写所需的粘接代码。
例如,名为的方法与页面的事件绑定,就像已编写以下代码样。
这种自动识别特殊名称的功能由指令的属性控制。
如果将该属性设置为,则任何想要处理个事件的应用程序都需显式地连接到该页面事件。
如果页面不使用自动事件关联功能,就不必进行额外的操作以匹配各名称和事件,从而其性能也稍有提升。
应该注意的是,所有的项目在创建时都禁用了属性。
然而,此属性的默认设置为,意味着诸如等方法会被识别并被绑定到相关的事件。
页面的执行过程包括下面表格中所列的系列阶段,并以具有些应用程序级事件和或受保护且可重写的方法为特征。
表格页面生存周期中的关键事件阶段页面事件可重写方法页面初始化加载视图状态处理回发数据实现接口的任何控件中的方法加载页面回发更改通知实现接口的任何控件中的方法处理回发事件控件所定义的任何回发事件实现了接口的任何控件的方法页面呈现前阶段保存视图状态呈现页面卸载页面在页面级上,以上所列的些阶段是不可见的,并仅影响服务器控件编写者和那些凑巧要创建从派生的类的开发人员。
页面向外界发送的活动信号仅包括以及嵌入式控件所定义的所有回发事件。
执行的各个阶段页面生存周期中的第个阶段是初始化。
这阶段的标志就是事件,在成功创建页面的控件树后,对应用程序激发这个事件。
换而言之,当事件发生时,在源文件中静态声明的所有控件都已实例化并取其默认值。
控件可挂起事件,以便初始化在传入的请求的生存周期中所需的任何设置。
例如,此时控件可以加载外部模板文件或设置各个事件的处理程序。
应该注意到,这时还没有视图状态信息可供使用。
在初始化之后,页面框架立即加载该页面的视图状态。
所谓视图状态就是些名称值对的集合,控件和页面本身可将那些对所有请求都必须始终有效的任何信息存储在其中。
视图状态表示页面的调用上下文。
般情况下,其中包含上次在服务器中处理该页面时各控件的状态。
首次在会话中请求页面时,视图状态为空。
在默认情况下,视图状态被存储在个隐藏字段中,而该字段是自行添加到页面中的。
该字段名称为。
通过重写方法类的个受保护且可重写的方法组件开发人员可控制如何还原视图状态以及如何将其内容映射到内部状态。
有些方法如及其相对的可用于将视图状态加载并保存到别的存储介质例如会话数据库或服务器端的文件中。
与不同,上述方法仅在派
