本章学习目标 . 了解内置对象的基本原理 . 熟练掌握Page对象的使用方法 . 熟练掌握Response对象的使用方法 . 熟练掌握Request对象的使用方法 . 熟练掌握Server对象的使用方法 . 熟练掌握Application对象的使用方法 . 熟练掌握Session对象的使用方法 . 了解Cookie对象的使用方法 . 熟练掌握全局应用程序类中的事件 本章首先介绍内置对象的作用,然后对ASP.NET 提供的Page、Request、Response、 Application、Session、Server、Cookie等内置对象进行详细讲解,最后添加全局应用程序类, 并对其中的事件进行应用测试。 5.1 Page对象 5.1.1 Page 对象的属性和方法 Page对象是System.Web.UI命名空间Page类的一个实例,是网页中所有服务器控件 的容器,在ASP.NET中每个页面都派生自Page类,并继承该类所有公开的方法和属性。 Page对象的主要属性如表5.1所示,主要事件如表5.2所示。 扫一扫 103 表5.1 Page对象的主要属性 属 性 名说 明 IsPostBack 获取一个值,指示页面是首次加载还是回发加载 IsValid 获取一个值,指示页面验证是否成功 说明: 1.IsPostBack属性可以检查.aspx页是否为“回发”,常用于判断页面是否为首次加载, 若为首次加载,则该值为False。 2.IsValid属性可以判断页面中输入的所有内容是否通过验证,使用服务器端验证时常 使用该属性。 表5.2 Page对象的主要事件 事 件 名说 明 PreInit 当页面初始化时触发 PreLoad 在页面Load事件之前触发 Load 当服务器加载到Page对象时触发 Init 当服务器控件初始化时触发 PreRender 在加载控件之后、呈现控件之前触发 Unload 当服务器控件从内存中卸载时触发 InitComplete 当页初始化完成时触发 LoadComplete 当页加载结束时触发 5.1.2 Page 对象的应用 网页C#代码中默认提供了Page.Load事件所对应的Page_Load()方法,而其他的事 件则需要编写其对应的方法,不需要如控件一样在源中声明。各事件触发执行的先后顺序 为:Page.PreInit、Page.Init、Page.InitComplete、Page.PreLoad、Page.Load、Page. LoadComplete、Page.PreRender和Page.Unload。 【示例5-1】 在E盘ASP.NET项目代码目录中创建chapter5子目录,将其作为网站 根目录,创建名为example5-1的网页,演示加载页面时Page对象的各种事件的触发执行 顺序。 (1)在页面中添加相应控件,具体如图5.1所示。 图5.1 Page对象应用页面设计 (2)设置相关控件的属性,如下列源代码所示。 104 <form id="form1" runat="server"> <span>Page 对象事件的触发顺序</span><hr> <asp:Label ID="lblInfo" runat="server"></asp:Label> <br/> <asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="提 交"/> </form> (3)为事件添加C#代码如下。 protected void Page_Load(object sender, EventArgs e) { if (! IsPostBack) { lblInfo.Text+="页面第一次加载"; } else { lblInfo.Text+="页面第二次或第二次以上加载"; } lblInfo.Text+="触发了Page 对象的Load 事件<br>"; }p rotected void Page_Init(object sender, EventArgs e) { lblInfo.Text+="触发了Page 对象的Init 事件<br>"; }p rotected void Page_PreInit(object sender, EventArgs e) { lblInfo.Text+="触发了Page 对象的PreInit 事件<br>"; }p rotected void Page_InitComplete(object sender, EventArgs e) { lblInfo.Text+="触发了Page 对象的InitComplete 事件<br>"; }p rotected void Page_PreLoad(object sender, EventArgs e) { lblInfo.Text+="触发了Page 对象的PreLoad 事件<br>"; }p rotected void Page_LoadComplete(object sender, EventArgs e) { lblInfo.Text+="触发了Page 对象的LoadComplete 事件<br>"; }p rotected void Page_PreRender(object sender, EventArgs e) { lblInfo.Text+="触发了Page 对象的PreRender 事件<br>"; }p rotected void Page_Unload(object sender, EventArgs e) { lblInfo.Text+="触发了Page 对象的Unload 事件<br>"; }p rotected void btnSubmit_Click(object sender, EventArgs e) { 105 lblInfo.Text+="触发了按钮的Click 事件<br>"; } (4)运行页面,页面显示相关事件执行顺序,如图5.2所示。单击“提交”按钮,页面显 示“回发”时相关事件执行的顺序,如图5.3所示。 图5.2 页面初次加载Page对象事件演示 图5.3 页面“回发”时Page对象事件演示 106 5.2 Response对象 5.2.1 Response 对象的属性和方法 Response对象是HttpResponse类的一个实例,封装来自ASP.NET 操作的HTTP响 应信息,提供对当前页的输出流访问,控制服务器发送给浏览器的信息,包括直接发送信息 给浏览器、重新定向浏览器到另一个URL,以及设置Cookie值等。Response对象的主要属 性如表5.3所示,主要方法如表5.4所示。 表5.3 Response对象的主要属性 属 性 名说 明 Buffer 获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个响应之后将其发送 BufferOutput 获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个页之后将其发送 Cache 获取Web页的缓存策略,如过期时间、保密性、变化子句等 Charset 获取或设置输出流的HTTP字符集 Cookie 获取响应的Cookie集合 Expires 获取或设置在浏览器上缓存的页过期前的分钟数 表5.4 Response对象的主要方法 方 法 名说 明 AppendCookie() 向响应对象的Cookie集合中增加一个Cookie对象 Clear() 清空缓冲区中的所有内容输出 Close() 关闭当前服务器到客户端的连接 End() 终止响应,并且将缓冲区中的输出发送到客户端 Redirect() 重定向当前请求 Write() 将信息写入HTTP的响应输出流 WriteFile() 将指定的文件直接写入HTTP的响应输出流 图5.4 Response对象应用 页面设计 5.2.2 Response 对象的应用 【示例5-2】 在E 盘ASP.NET 项目代码的chapter5目录 下,添加一个文本文件,命名为“1.txt”,编写文本内容为“Thisis atext”,创建名为example5-2的网页,练习使用Response对象 的各种属性和方法。 (1)在页面中添加相应控件,具体如图5.4所示。 (2)设置相关控件的属性,如下列源代码所示。 扫一扫 107 <form id="form1" runat="server"> <div> Response 对象的应用<br/> <asp:Button ID="btnWriteTxt" runat="server" Text="Write 方法输出简单文 本" OnClick="btnWriteTxt_Click"/> <br/> <asp:Button ID="btnWriteHTML" runat="server" Text="Write 方法输出HTML 标签" OnClick="btnWriteHTML_Click"/> <br/> < asp:Button ID="btnWriteJS" runat="server" Text="Write 方法输出JS 脚 本" OnClick="btnWriteJS_Click"/> <br/> < asp: Button ID="btnWriteFile" runat="server" Text="WriteFile 方法" OnClick="btnWriteFile_Click"/> <br/> < asp: Button ID =" btnRedirect" runat =" server" Text =" Redirect 方法" OnClick="btnRedirect_Click"/> </div> </form> (3)为事件添加C#代码如下。 protected void btnWriteTxt_Click(object sender, EventArgs e) { Response.Write("普通文字输出"); }p rotected void btnWriteHTML_Click(object sender, EventArgs e) { Response.Write("<a href=123>包含html 标签的文本</a>"); }p rotected void btnWriteJS_Click(object sender, EventArgs e) { Response.Write("<script>alert('包含脚本文本');</script>"); }p rotected void btnWriteFile_Click(object sender, EventArgs e) { Response.WriteFile(@"E:\ASP.NET 项目代码\chapter51.txt"); }p rotected void btnRedirect_Click(object sender, EventArgs e) { Response.Redirect("example5-1.aspx"); } (4)运行页面,单击按钮,可获取Response对象各方法和属性的基本功能,单击 “WriteFile方法”按钮,运行时效果如图5.5所示。 图5.5 Response对象应用页面演示 108 5.3 Request对象 5.3.1 Request 对象的属性和方法 Request对象是System.Web.HttpRequest类的实例,当客户请求ASP.NET 页面时, 所有的请求信息,包括请求报头、请求方法、客户端基本信息等被封装在Request对象中,利 用Request对象可以读取这些请求信息。Request对象的主要属性如表5.5所示,主要方法 如表5.6所示。 表5.5 Request对象的主要属性 属 性 名说 明 Browser 获取正在请求的客户端浏览器功能的信息 Cookies 获取客户端发送的Cookie的集合 Form 获取表单变量的集合 FilePath 获取当前请求的虚拟路径 Param 获取地址栏中的参数集合 QueryString 获取HTTP查询字符串变量集合 UserHostAddress 获取远程客户端的IP主机地址 Url 获取有关当前请求的URL信息 UserHostName 获取远程客户端的DNS名称 表5.6 Request对象的主要方法 方 法 名说 明 BinaryRead() 执行对当前输入流进行指定字节数的二进制读取 MapPath() 将请求的URL中的虚拟路径映射到服务器上的物理路径 SaveAs() 将HTTP请求保存到文件中 5.3.2 Request 对象的应用 【示例5-3】 在E盘ASP.NET项目代码的chapter5目录下,创建名为example5-3的 网页,练习使用Request对象的各种属性。 (1)在页面中添加相应控件,具体如图5.6所示。 图5.6 Request对象应用页面设计 扫一扫 109 (2)设置相关控件的属性,如下列源代码所示。 <form id="form1" runat="server"> Request 对象的属性与方法<br/> <br/> < asp: Button ID="btnGetInfo" runat="server" OnClick="btnGetInfo_Click" Text="获取客户端信息"/> <br/> <asp:Label ID="lblInfo" runat="server"></asp:Label> </form> (3)为事件添加C#代码如下。 protected void btnGetInfo_Click(object sender, EventArgs e) { lblInfo.Text="<br>客户端浏览器名称:"+Request.Browser.Type +"<br>版本号:"+Request.Browser.Version +"<br>客户端使用的操作系统:"+Request.Browser.Platform +"<br>客户端IP 地址:"+Request.UserHostAddress +"<br>当前请求的URL:"+Request.Url +"<br>当前请求的虚拟路径:"+Request.Path +"<br>当前请求的物理路径:"+Request.PhysicalPath; } (4)运行页面,单击相关按钮,运行结果如图5.7所示。 图5.7 Request对象应用页面演示 【示例5-4】 在E盘ASP.NET项目代码的chapter5目录下,创建example5-4页面和 example5-4-2页面,练习使用Request对象和Response对象进行地址栏传值。 (1)在example5-4网页和example5-4-2页面中添加相应控件,具体如图5.8和图5.9 所示。 example5-4页面: 110 图5.8 Request对象应用的网页设计1 example5-4-2页面: 图5.9 Request对象应用的网页设计2 (2)设置相关控件的属性,如下列源代码所示。 example5-4.aspx 页: <form id="form1" runat="server"> 用户ID:<asp:TextBox ID="txtID" runat="server"></asp:TextBox> <br/> 昵称:<asp:TextBox ID="txtName" runat="server"></asp:TextBox> <br/> < asp: Button ID ="btnRedirect" runat ="server" onclick =" btnRedirect _ Click " Text="页码跳转并地址栏传值"/> </form> example5-4-2.aspx 页: <form id="form1" runat="server"> 欢迎登录<br/> ID:<asp:Label ID="lblID" runat="server"></asp:Label> <br/> Name:<asp:Label ID="lblName" runat="server"></asp:Label> </form> (3)为事件添加C#代码如下。 example5-4.cs: protected void btnRedirect_Click(object sender, EventArgs e) { Response.Redirect("example5- 4- 2.aspx? id="+ txtID.Text+"&name="+ txtName. Text); }e xample5-4-2.cs: protected void Page_Load(object sender, EventArgs e) { if (Request.Params["id"] ! =null && Request["name"] ! =null) { lblID.Text=Request.Params["id"].ToString(); lblName.Text=Request.Params["name"].ToString(); } else { Response.Redirect("example5-4.aspx"); } } 111 (4)运行页面,在example5-4页面输入用户ID、昵称,单击“页面跳转并地址栏传值”按 钮提交服务器,如图5.10所示。在example5-4-2页面获取地址栏中的参数值,显示在页面 中,如图5.11所示。 图5.10 Request对象应用页面演示2 图5.11 Request对象应用页面演示3 5.4 Server对象 5.4.1 Server 对象的属性和方法 Server对象是HttpServerUtility类的一个实例,提供对服务器属性和方法的访问功 能,可以处理页面请求时所需的功能,如建立COM 对象、字符串的编译码等工作。Server 对象的主要属性如表5.7所示,主要方法如表5.8所示。 表5.7 Server对象的主要属性 属 性 名说 明 MachineName 获取服务器的名称 ScriptTimeOut 获取或设置请求的超时值(单位为秒) 表5.8 Server对象的主要方法 方 法 名说 明 Execute() 执行指定的资源,并且在执行完之后再执行本页的代码 HtmlDecode() 对HTML编码的字符串进行解码 HtmlEncode() 对要在浏览器中显示的字符串进行HTML编码 MapPath() 获取指定相对路径在服务器上的物理路径 Transfer() 停止执行当前程序,执行指定的资源 UrlDecode() 对已被编码的URL字符串进行解码 UrlEncode() 对URL的字符串进行编码,通过URL 从Web服务器到客户端进行HTTP 传输 扫一扫