在这章中,我们研究页面生命周期以及页面如何包含各种控件。页面本身被实例化为一个控制对象。所有的Web窗体基本上都是ASP.NET Page
类的实例。 Page
类具有以下对应于内部对象的非常有用的属性:
- Session
- Application
- Cache
- Request
- Response
- Server
- User
- Trace
我们将在适当的时候讨论这些对象。在本教程中,我们将学习Server
对象,Request
对象和Response
对象。
Server对象
Asp.NET中的Server
对象是System.Web.HttpServerUtility
类的一个实例。 HttpServerUtility
类提供了许多执行各种作业的属性和方法。
服务器对象的属性和方法HttpServerUtility
类的方法和属性通过ASP.NET提供的内部服务器对象公开。
下表提供了属性的列表:
属性 | 描述 |
---|---|
MachineName | 服务器计算机的名称 |
ScriptTimeOut | 获取和设置请求超时值,以秒为单位。 |
下表列出了一些重要的方法:
编号 | 方法 | 描述 |
---|---|---|
1 | CreateObject(String) |
创建由其ProgID(编程ID)标识的COM对象的一个实例。 |
2 | CreateObject(Type) |
创建由其类型标识的COM对象的一个实例。 |
3 | Equals(Object) |
确定指定的对象(Object )是否等于当前的对象。 |
4 | Execute(String) |
在当前请求的上下文中执行指定虚拟路径的处理程序。 |
5 | Execute(String, Boolean) |
在当前请求的上下文中执行指定虚拟路径的处理程序,并指定是否清除QueryString 和Form 集合。 |
6 | GetLastError |
返回以前的异常。 |
7 | GetType |
获取当前实例的类型。 |
8 | HtmlEncode |
将普通字符串更改为具有合法HTML字符的字符串。 |
9 | HtmlDecode |
将Html字符串转换为普通字符串。 |
10 | ToString |
返回表示当前对象的字符串。 |
11 | Transfer(String) |
对于当前请求,终止当前页面的执行,并使用指定的页面URL路径开始执行新页面。 |
12 | UrlDecode |
将URL字符串转换为普通字符串。 |
13 | UrlEncodeToken |
与UrlEncode 相同,但是在包含Base64编码数据的字节数组上。 |
14 | UrlDecodeToken |
与UrlDecode 相同,但在包含Base64编码数据的字节数组上。 |
15 | MapPath |
返回与服务器上指定的虚拟文件路径对应的物理路径。 |
16 | Transfer |
将执行转移到当前应用程序中的另一个网页。 |
HttpRequest对象
HttpRequest
对象是System.Web.HttpRequest
类的一个实例。 它表示使页面加载到浏览器中的HTTP请求的值和属性。
这个对象提供的信息被更高层次的抽象(Web控制模型)所包围。 但是,此对象有助于检查某些信息,如客户端浏览器和Cookie。
请求对象的属性和方法
下表提供了Request
对象的一些值得注意的属性:
编号 | 属性 | 描述 |
---|---|---|
1 | AcceptTypes |
获取客户端支持的MIME接受类型的字符串数组。 |
2 | ApplicationPath |
获取服务器上的ASP.NET应用程序的虚拟应用程序根路径。 |
3 | Browser |
获取或设置有关请求客户端的浏览器功能的信息。 |
4 | ContentEncoding |
获取或设置实体主体的字符集。 |
5 | ContentLength |
指定客户端发送的内容的长度(以字节为单位)。 |
6 | ContentType |
获取或设置传入请求的MIME内容类型。 |
7 | Cookies |
获取客户端发送的Cookie的集合。 |
8 | FilePath |
获取当前请求的虚拟路径。 |
9 | Files |
获取客户端上传的文件的集合,采用多部分MIME格式。 |
10 | Form |
获取表单变量的集合。 |
11 | Headers |
获取HTTP标头的集合。 |
12 | HttpMethod |
获取客户端使用的HTTP数据传输方法(如GET ,POST 或HEAD )。 |
13 | InputStream |
获取传入的HTTP实体主体的内容。 |
14 | IsSecureConnection |
获取一个值,该值指示HTTP连接是否使用安全套接字(即HTTPS)。 |
15 | QueryString |
获取HTTP查询字符串变量的集合。 |
16 | RawUrl |
获取当前请求的原始URL。 |
17 | RequestType |
获取或设置客户端使用的HTTP数据传输方法(GET 或POST )。 |
18 | ServerVariables |
获取Web服务器变量的集合。 |
19 | TotalBytes |
获取当前输入流中的字节数。 |
20 | Url |
获取有关当前请求的URL的信息。 |
21 | UrlReferrer |
获取有关链接到当前URL的客户端先前请求的URL的信息。 |
22 | UserAgent |
获取客户端浏览器的原始用户代理字符串。 |
23 | UserHostAddress |
获取远程客户端的IP主机地址。 |
24 | UserHostName |
获取远程客户端的DNS名称。 |
25 | UserLanguages |
获取客户端语言首选项的排序字符串数组。 |
下表列出了一些重要的方法:
编号 | 方法 | 描述 |
---|---|---|
1 | BinaryRead |
对当前输入流执行指定字节数的二进制读取。 |
2 | Equals(Object) |
确定指定的对象是否等于当前对象。 (从object继承。) |
3 | GetType |
获取当前实例的类型。 |
4 | MapImageCoordinates |
将传入的图像字段形式参数映射到适当的x 坐标和y 坐标值。 |
5 | MapPath(String) |
将指定的虚拟路径映射到物理路径。 |
6 | SaveAs |
将HTTP请求保存到磁盘。 |
7 | ToString |
返回表示当前对象的字符串。 |
8 | ValidateInput |
对通过Cookies ,Form 和QueryString 属性访问的集合进行验证。 |
Response对象
Response对象表示服务器对客户端请求的响应。 它是System.Web.HttpResponse
类的一个实例。
在ASP.NET中,响应对象在向客户端发送HTML文本时不起任何重要作用,因为服务器端控件具有嵌套的,面向对象的方法来呈现自己。
但是,HttpResponse
对象仍然提供了一些重要的功能,如Cookie
功能和Redirect()
方法。 Response.Redirect()
方法允许将用户转移到另一个页面。
Response对象的属性和方法
下表提供了Response
对象的一些值得注意的属性:
编号 | 属性 | 描述 |
---|---|---|
1 | Buffer |
获取或设置一个值,指示是否缓冲输出并在完成响应完成处理后发送。 |
2 | BufferOutput |
获取或设置一个值,指示是否在完成页面处理完成后缓存输出并发送。 |
3 | Charset |
获取或设置输出流的HTTP字符集。 |
4 | ContentEncoding |
获取或设置输出流的HTTP字符集。 |
5 | ContentType |
获取或设置输出流的HTTP MIME类型。 |
6 | Cookies |
获取响应cookie集合。 |
7 | Expires |
获取或设置在浏览器上缓存的页面到期之前的分钟数。 |
8 | ExpiresAbsolute |
获取或设置从缓存中删除缓存信息的绝对日期和时间。 |
9 | HeaderEncoding |
获取或设置一个编码对象,该对象表示当前标题输出流的编码。 |
10 | Headers |
获取响应标头的集合。 |
11 | IsClientConnected |
获取一个值,指示客户端是否仍连接到服务器。 |
12 | Output |
启用将文本输出到传出的HTTP响应流。 |
13 | OutputStream |
启用二进制输出到传出HTTP内容主体。 |
14 | RedirectLocation |
获取或设置Http Location标头的值。 |
15 | Status |
设置返回给客户端的状态行。 |
16 | StatusCode |
获取或设置返回给客户端的输出的HTTP状态码。 |
17 | StatusDescription |
获取或设置返回给客户端的输出的HTTP状态字符串。 |
18 | SubStatusCode |
获取或设置一个限定响应状态码的值。 |
19 | SuppressContent |
获取或设置一个值,指示是否向客户端发送HTTP内容。 |
下表列出了一些重要的方法:
编号 | 方法 | 描述 |
---|---|---|
1 | AddHeader |
将HTTP标头添加到输出流。提供AddHeader 是为了与早期版本的ASP兼容。 |
2 | AppendCookie |
基础架构将HTTP cookie添加到内部cookie集合中。 |
3 | AppendHeader |
将HTTP标头添加到输出流。 |
4 | AppendToLog |
将自定义日志信息添加到InterNET信息服务(IIS)日志文件。 |
5 | BinaryWrite |
将一串二进制字符写入HTTP输出流。 |
6 | ClearContent |
清除缓冲流中的所有内容输出。 |
7 | Close |
关闭与客户端的套接字连接。 |
8 | End |
将所有当前缓冲的输出发送到客户端,停止页面的执行,并引发EndRequest 事件。 |
9 | Equals(Object) |
确定指定的对象(Object )是否等于当前对象。 |
10 | Flush |
将所有当前缓冲的输出发送到客户端。 |
11 | GetType |
获取当前实例的类型。 |
12 | Pics |
将HTTP PICS-Label标头附加到输出流。 |
13 | Redirect(String) |
将请求重定向到新的URL并指定新的URL。 |
14 | Redirect(String, Boolean) |
将客户端重定向到新的URL。指定新的URL以及当前页面的执行是否应该终止。 |
15 | SetCookie |
更新cookie 集合中的现有cookie。 |
16 | ToString |
返回表示当前对象的字符串。 |
17 | TransmitFile(String) |
将指定的文件直接写入HTTP响应输出流,而不将其缓冲在内存中。 |
18 | Write(Char) |
将一个字符写入HTTP响应输出流。 |
19 | Write(Object) |
将对象写入HTTP响应流。 |
20 | Write(String) |
将一个字符串写入HTTP响应输出流。 |
21 | WriteFile(String) |
将指定文件的内容直接写入HTTP响应输出流作为文件块。 |
22 | WriteFile(String, Boolean) |
将指定文件的内容直接写入HTTP响应输出流作为内存块。 |
示例
下面的简单例子有一个文本框控件,用户可以输入名字,一个按钮将信息发送到服务器,一个标签控件用于显示客户端的URL。
打开Visual Studio,创建一个空的网站项目:ServerSide,参考下图 -
在项目名称上点击右键,并添加一个Web窗体文件(Defualt.aspx),参考下图 -
其内容如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>服务器端示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="请输入姓名:"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label2" runat="server"></asp:Label>
</div>
</form>
</body>
</html>
打开 Default.cs,添加Button1_Click
事件处理的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(TextBox1.Text))
{
// Access the HttpServerUtility methods through
// the intrinsic Server object.
Label1.Text = "欢迎您, " + Server.HtmlEncode(TextBox1.Text) + ". <br/> 当前 URL 是 " + Server.UrlEncode(Request.Url.ToString());
}
}
}
运行该项目(页面),得到类似以下结果:
输入一个名字:zaixian,然后提交,得到以下结果 -