再谈ASP.NET第四 - Page类分析

本文整理自《ASP.NET3.5核心编程》,以下内容适用于ASP.NET2.0以上版本。

Page类提供了由.aspx文件创建所有对象的基本行为。(这个有<asp:Control />标签生成C#描述的类型的对象的过程是我们看不到的,这是由编译器自动完成的。)Page可以实现这个功能是由于其实现了IHttpHandler接口。实现IHttpHandler接口,就可以充当相应类型的(此处为.aspx文件)的HTTP请求的处理程序。IHttpHandler接口的关键方法ProcessRequest完成了上述由.aspx文件创建所有对象的过程。

Page的父类TemplateControl定义了页面(或控件)的一组基本功能。TemplateControl上层的Control类定义ASP.NET服务器端元素(包括页面、控件和用户控件)共享的属性、方法和事件。TemplateControl实现的INamingContainer接口使Page可以作为控件的容器。

Page类的属性

Page类的属性分为三类:内置对象、Worker属性和页面特有的属性。以下分别介绍:

内部对象

这些属性的类型都是页内部的辅助对象,它们都是使页面能够正常执行的基本元素。

属 性

说 明

Application

返回HttpApplicationState类的实例。它代表当前应用程序的状态。

Cache

返回Cache类的实例,为ASP.NET应用程序实现了缓存。其支持任务优先级和到期(expiration),且比Application效率更高,功能更强

Profile

返回ProfileCommon类的实例。它代表与请求关联的、用户特有的数据集合

Request

返回HttpResponst类的实例。它代表当前HTTP请求。

Response

返回HttpResponse类的实例。它用于将HTTP响应数据发送给客户端。

Server

返回HttpServerUtility类的实例。它提供处理Web请求的辅助方法。

Session

返回HttpSessionState类的实例。它用于管理用户特有的数据。

Trace

返回TraceContext类的实例。它用于对页面进行跟踪

User

返回IPrincipal类型的对象。它代表发出请求的用户

Worker属性

这些属性用于承载信息和提供基本功能。在进行页面编程时,这些属性必不可少。

属 性

说 明

ClientScript

用于获取ClientScriptManager对象,它包含页面使用的客户端脚本。

Controls

返回当前页面包含的字控件集合

ErrorPage

表示错误页的属性,在发生未处理页面异常时,发出请求的浏览器会被重定向到该页面上

Form

返回当前页面的HtmlForm对象

Header

返回代表当前页面标头的对象。该对象实现了IPageHeader接口。

IsAsync

用于指示当前页是否被异步处理程序调用。

IsCallback

用于指示当前被加载的页面是否为客户端脚本回调的结果。

IsCrossPagePostBack

用于指示当前被加载的页面是否是对另一个页面回发的响应

IsPostBack

用于指示当前被加载的页面是对客户端回发的响应,还是第一次加载

IsValid

用于指示页面验证是否成功

Master

返回MasterPage类的实例。它代表确定当前页面外观的母版页。

MasterPageFile

表示当前页面的母版页的文件名的属性

NamingContainer

返回null

Page

返回当前Page对象(C#中就是this)

PageAdapter

返回当前Page对象的适配器对象

Parent

返回null

PreviousPage

返回跨页回发中主调用页的引用

TemplateSourceDirectory

获取当前页面的虚拟路径

Validators

返回页中包含的所有验证控件的集合

ViewStateUserKey

字符串类型的属性,代表用户特有的标识,用于对视图状态的内容进行散列加密(hash)。该措施是单键攻击(one-click attack)的防线之一

解释:由于Page对象处于层状结构的根节点。所以,NamingContainer与Parent属性总是返回null。ViewStateUserKey可以接受用户特有的信息,这些信息可以是通过验证的会话id等。此属性可以被用来加密ViewState等。另外ViewStateUserKey必须在Page_Init中设置。

上下文属性

这些属性代表页面的可视和非可视属性(attribute)

属 性

说 明

ClientID

总是返回空字符串

ClientQueryString

获取被请求URL的查询字符串部分。

ClientTarget

默认为空字符串,允许开发者指定浏览器类型,以便生成正确的HTML。设置此属性将禁用浏览器的自动检测功能

EnableViewState

用于指示当前页是否管理视图状态信息。作用相当于@Page中的EnableViewState属性

EnableViewStateMac

用于指示ASP.NET是否需要生成计算机特有的身份验证吗(MAC),并将其追加到页面的视图状态中

EnableTheming

用于指示当前页是否支持主题

ID

总是返回空字符串

MaintainScrollPositionOnPostback

用于指示在回发后是否恢复客户端浏览器的滚动条位置

SmartNavigation

用于指示是否开启智能导航。智能导航利用了大量浏览器特有的功能来加深用户对页面的体验

StyleSheetTheme

表示应用于当前页面的样式表名称

Theme

表示应用于页面的主题的名称。注意,若以编码的方式设置主题,则只能在PreInit事件中进行。

Title

表示页面的标题的属性

TraceEnabled

打开或关闭当前页的跟踪功能

TraceModeValue

获取或设置跟踪模式

UniqueID

总是返回空字符串

ViewStateEncryptionMode

用于指示是否加密视图状态及加密方式

Visible

用于指示ASP.NET是否呈现该页面。如果将Visible设置为false,ASP.NET不会为该页生成任何HTML代码,且只有显示使用Response.Write写入的文本会被发往客户端

Page对象中三个与ID有关的属性 – ID、ClientID与UniqueID总返回空字符串,因为这些仅用于服务器控件,在Page中没有意义。

Page类的方法

Page类的方法可以按功能分为以下几类。分别总结如下:

用于呈现(生成标记)的方法

方 法

说 明

DataBind

用于将页面中的所有可数据绑定的控件绑定到它所对应的数据源上。DataBind方法本身不会生成代码,但为后续的呈现铺平道路

RenderControl

用于将当前页面输出为HTML文本,如果启用跟踪,结果中将会包含跟踪信息

VerifyRenderingInServerForm

控件在生成时会调用该方法,以确保服务器窗体的主体中包含它们。该方法不会返回值,但发生错误时会抛出异常

说明:在ASP.NET中所有runat属性为server的控件都需要放置在<form>标签内,以使其可以由VerifyRenderingInServerForm方法来确保自身被正确呈现。

控件相关的方法

方 法

说 明

DesignerInitialize

当页面处于Visual Studio设计器模式中时,该方法用于对Page类的实例进行初始化

FindControl

通过控件的ID在页面的命名容器中查找它。该搜索不会进入本身也为命名容器的子控件

GetTypeHashCode

用于在运行时获取由ASP.xxx_aspx页面类生产的哈希码。在基类Page中,该方法的实现仅仅是返回0,而实际的页面类会返回大量数字

GetValidators

返回指定验证组(validation group)的控件验证程序集合。

HasControls

检查当前页是否包含子控件

LoadControl

用于编译并加载.ascx文件中的用户控件,之后会返回一Control对象。如果该用户控件支持缓存,则返回PartialCachingControl

LoadTemplate

编译并加载.ascx文件中的用户控件,返回实现ITemplate接口的内部类的实例,它对该控件进行了封装。这个内部类名为SimpleTemplate

MapPath

获取映射到绝对或相对虚拟路径的完整物理地址

ParseControl

用于对输入的有效字符串进行解析,返回指定标记文本所对应的控件实例。如果该字符串包含多个控件,则只有第一个有效。runat属性会被忽略。该方法返回的是一个Control类型的实例,因而必须转换成更具体的类型

RegisterRequiresControlState

将控件注册为具有持久性控件状态的。

RegisterRequiresPostBack

用于注册指定控件,使其能够接收到回发处理通知(即便其ID与已回发数据集合中的任何ID都不匹配)。该控件必须实现IPostBackDataHandler接口

RegisterRequiresRaiseEvent

用于注册指定控件,使其能够处理输入的回发事件。该控件必须实现IPostBackEventHandler接口

RegisterViewStateHandler

该方法用于设置一内部标志,以便保持当前页视图状态,多数情况为内部使用。如果该方法没有在预呈现阶段被调用,则不会写入任何视图状态。一般仅有页面的HtmlForm服务器控件会调用该方法。不需要在用户应用程序中调用

ResolveUrl

根据TemplateSourceDirectory属性值,将一相对URL解析为绝对URL

Validate

使页中的所有验证控件对其被赋予的信息进行验证。ASP.NET 2.0支持验证组,对需要验证的控件进行逻辑分类,且各组之间互不干扰

这些方法中,有如下值得说道的,LoadControl和LoadTemplate方法除了在返回值得类型上,前者返回Control类对象,后者返回ITemplate类型对象外其于内部代码都相同。另外这两个方法区别于ParseControl方法的地方在于后者不引发编译,而只是解析字符串并推断控件信息。该信息用于控件实例的创建及初始化。

脚本相关的方法

以下这些Page类的方法用于将Html和脚本代码插入到客户端页面。

方法

说明

GetCallbackEventReference

用于获取客户端函数的引用。该函数被调用时,将引发客户端向服务器端的回调事件

GetPostBackClientEvent

转而调用GetCallbackEventReference

GetPostBackClientHyperlink

用于向从GetPostBackEventReference返回的字符串的开始处追加“javascript:”,如:javascript:__doPostBack('CtlID','')

GetPostBackEventReference

返回客户端脚本函数的原型。当该脚本函数被调用时,将引起回发的执行。它接受一个Control对象和一个参数,返回的字符串形式如下:__doPostBack('CtlID','')

IsClientScriptBlockRegistered

用于确定页面是否注册了指定的客户端脚本。该方法已被标记为过时

IsStartupScriptRegistered

用于确定页面是否注册了指定的客户端启动脚本。该方法已被标记为过时

RegisterArrayDeclaration

该方法用于将ECMAScript数组添加到客户端页面上。其接受一数组名和一个代表数组主体的字符串。例如,如果以theArray 和“'a', 'b'”为参数调用该方法,则会得到以下JavaScript代码:var theArray = new Array('a', 'b');

该方法已被标记为过时

RegisterClientScriptBlock

ASP.NET页使用这个方法向客户端页面的HTTP <form>元素的开标记后添加脚本代码块。该方法已被标记为过时

RegisterHiddenField

用于自动向页面注册隐含字段。该方法已被标记为过时

RegisterOnSubmitStatement

该方法用于添加处理OnSubmit事件的客户端脚本代码。该脚本应为一个JavaScript函数,它会调用已在某处注册的脚本代码。该方法已被标记为过时

RegisterStartupScript

ASP.NET页使用这个方法向客户端页面的HTTP <form>元素的闭标记前添加脚本代码块。该方法已被标记为过时

SetFocus

将浏览器的焦点设置在指定控件上。

这其中很多方法被标记为过时,我们应该使用Page的ClientScript中的相关方法来操作客户端脚本。当我们使用RegisterXXX方法注册脚本时,脚本被缓存在一个结构中并在页面渲染后背生产到最终的Html文档里。

Page类的事件

在页面生命周期里,会触发一些列的事件。这些事件一般都标记者一个关键的处理阶段。

事件

说明

AbortTransaction

若ASP.NET页参与自动事务,该事件会在事务中止时引发

CommitTransaction

若ASP.NET页参与自动事务,该事件会在事务提交时引发

DataBinding

在页的DataBind方法被调用时引发。该方法会对页中的所有子控件与其所对应的数据源进行绑定

Disposed

在页从内存中被释放后引发。该事件标志着页面生命周期的最后阶段

Error

在未处理异常被抛出时引发

Init

在页面被初始化时引发。该事件标志着页面生命周期的第一个阶段

InitComplete

在页及其所有子控件全部初始化完毕后引发。ASP.NET 1.x不支持该事件

Load

在页面初始化完毕后,进行加载时引发

LoadComplete

在页面加载结束,且服务器事件也已引发完毕后引发。ASP.NET 1.x不支持该事件

PreInit

在页面的初始化阶段开始时引发。ASP.NET 1.x不支持该事件

PreLoad

在页面的加载阶段开始时引发。ASP.NET 1.x不支持该事件

PreRender

在页面即将被呈现时引发

PreRenderComplete

在页面的预呈现阶段开始时引发。ASP.NET 1.x不支持该事件

SaveStateComplete

在页面的视图状态已存储在持久性介质中后引发。ASP.NET 1.x不支持该事件

Unload

在页从内存中被卸载后但尚未释放前引发

你可能感兴趣的:(asp.net)