zoukankan      html  css  js  c++  java
  • 再谈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

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

  • 相关阅读:
    C
    O
    扩展KMP
    扩欧与乘法逆元
    E
    D
    [LeetCode] Same Tree 深度搜索
    [LeetCode] Remove Duplicates from Sorted List 链表
    [LeetCode] Balanced Binary Tree 深度搜索
    [LeetCode] Remove Nth Node From End of List 快慢指针
  • 原文地址:https://www.cnblogs.com/lsxqw2004/p/2138494.html
Copyright © 2011-2022 走看看