在這章中,我們研究頁(yè)面生命周期以及頁(yè)面如何包含各種控件。頁(yè)面本身被實(shí)例化為一個(gè)控制對(duì)象。所有的Web窗體基本上都是ASP.NET Page類的實(shí)例。 Page類具有以下對(duì)應(yīng)于內(nèi)部對(duì)象的非常有用的屬性:
我們將在適當(dāng)?shù)臅r(shí)候討論這些對(duì)象。在本教程中,我們將學(xué)習(xí)Server對(duì)象,Request對(duì)象和Response對(duì)象。
Asp.NET中的Server對(duì)象是System.Web.HttpServerUtility類的一個(gè)實(shí)例。 HttpServerUtility類提供了許多執(zhí)行各種作業(yè)的屬性和方法。
服務(wù)器對(duì)象的屬性和方法HttpServerUtility類的方法和屬性通過(guò)ASP.NET提供的內(nèi)部服務(wù)器對(duì)象公開。
下表提供了屬性的列表:
| 屬性 | 描述 |
|---|---|
| MachineName | 服務(wù)器計(jì)算機(jī)的名稱 |
| ScriptTimeOut | 獲取和設(shè)置請(qǐng)求超時(shí)值,以秒為單位。 |
下表列出了一些重要的方法:
| 編號(hào) | 方法 | 描述 |
|---|---|---|
| 1 | CreateObject(String) |
創(chuàng)建由其ProgID(編程ID)標(biāo)識(shí)的COM對(duì)象的一個(gè)實(shí)例。 |
| 2 | CreateObject(Type) |
創(chuàng)建由其類型標(biāo)識(shí)的COM對(duì)象的一個(gè)實(shí)例。 |
| 3 | Equals(Object) |
確定指定的對(duì)象(Object)是否等于當(dāng)前的對(duì)象。 |
| 4 | Execute(String) |
在當(dāng)前請(qǐng)求的上下文中執(zhí)行指定虛擬路徑的處理程序。 |
| 5 | Execute(String, Boolean) |
在當(dāng)前請(qǐng)求的上下文中執(zhí)行指定虛擬路徑的處理程序,并指定是否清除QueryString和Form集合。 |
| 6 | GetLastError |
返回以前的異常。 |
| 7 | GetType |
獲取當(dāng)前實(shí)例的類型。 |
| 8 | HtmlEncode |
將普通字符串更改為具有合法HTML字符的字符串。 |
| 9 | HtmlDecode |
將Html字符串轉(zhuǎn)換為普通字符串。 |
| 10 | ToString |
返回表示當(dāng)前對(duì)象的字符串。 |
| 11 | Transfer(String) |
對(duì)于當(dāng)前請(qǐng)求,終止當(dāng)前頁(yè)面的執(zhí)行,并使用指定的頁(yè)面URL路徑開始執(zhí)行新頁(yè)面。 |
| 12 | UrlDecode |
將URL字符串轉(zhuǎn)換為普通字符串。 |
| 13 | UrlEncodeToken |
與UrlEncode相同,但是在包含Base64編碼數(shù)據(jù)的字節(jié)數(shù)組上。 |
| 14 | UrlDecodeToken |
與UrlDecode相同,但在包含Base64編碼數(shù)據(jù)的字節(jié)數(shù)組上。 |
| 15 | MapPath |
返回與服務(wù)器上指定的虛擬文件路徑對(duì)應(yīng)的物理路徑。 |
| 16 | Transfer |
將執(zhí)行轉(zhuǎn)移到當(dāng)前應(yīng)用程序中的另一個(gè)網(wǎng)頁(yè)。 |
HttpRequest對(duì)象是System.Web.HttpRequest類的一個(gè)實(shí)例。 它表示使頁(yè)面加載到瀏覽器中的HTTP請(qǐng)求的值和屬性。
這個(gè)對(duì)象提供的信息被更高層次的抽象(Web控制模型)所包圍。 但是,此對(duì)象有助于檢查某些信息,如客戶端瀏覽器和Cookie。
請(qǐng)求對(duì)象的屬性和方法
下表提供了Request對(duì)象的一些值得注意的屬性:
| 編號(hào) | 屬性 | 描述 |
|---|---|---|
| 1 | AcceptTypes |
獲取客戶端支持的MIME接受類型的字符串?dāng)?shù)組。 |
| 2 | ApplicationPath |
獲取服務(wù)器上的ASP.NET應(yīng)用程序的虛擬應(yīng)用程序根路徑。 |
| 3 | Browser |
獲取或設(shè)置有關(guān)請(qǐng)求客戶端的瀏覽器功能的信息。 |
| 4 | ContentEncoding |
獲取或設(shè)置實(shí)體主體的字符集。 |
| 5 | ContentLength |
指定客戶端發(fā)送的內(nèi)容的長(zhǎng)度(以字節(jié)為單位)。 |
| 6 | ContentType |
獲取或設(shè)置傳入請(qǐng)求的MIME內(nèi)容類型。 |
| 7 | Cookies |
獲取客戶端發(fā)送的Cookie的集合。 |
| 8 | FilePath |
獲取當(dāng)前請(qǐng)求的虛擬路徑。 |
| 9 | Files |
獲取客戶端上傳的文件的集合,采用多部分MIME格式。 |
| 10 | Form |
獲取表單變量的集合。 |
| 11 | Headers |
獲取HTTP標(biāo)頭的集合。 |
| 12 | HttpMethod |
獲取客戶端使用的HTTP數(shù)據(jù)傳輸方法(如GET,POST或HEAD)。 |
| 13 | InputStream |
獲取傳入的HTTP實(shí)體主體的內(nèi)容。 |
| 14 | IsSecureConnection |
獲取一個(gè)值,該值指示HTTP連接是否使用安全套接字(即HTTPS)。 |
| 15 | QueryString |
獲取HTTP查詢字符串變量的集合。 |
| 16 | RawUrl |
獲取當(dāng)前請(qǐng)求的原始URL。 |
| 17 | RequestType |
獲取或設(shè)置客戶端使用的HTTP數(shù)據(jù)傳輸方法(GET或POST)。 |
| 18 | ServerVariables |
獲取Web服務(wù)器變量的集合。 |
| 19 | TotalBytes |
獲取當(dāng)前輸入流中的字節(jié)數(shù)。 |
| 20 | Url |
獲取有關(guān)當(dāng)前請(qǐng)求的URL的信息。 |
| 21 | UrlReferrer |
獲取有關(guān)鏈接到當(dāng)前URL的客戶端先前請(qǐng)求的URL的信息。 |
| 22 | UserAgent |
獲取客戶端瀏覽器的原始用戶代理字符串。 |
| 23 | UserHostAddress |
獲取遠(yuǎn)程客戶端的IP主機(jī)地址。 |
| 24 | UserHostName |
獲取遠(yuǎn)程客戶端的DNS名稱。 |
| 25 | UserLanguages |
獲取客戶端語(yǔ)言首選項(xiàng)的排序字符串?dāng)?shù)組。 |
下表列出了一些重要的方法:
| 編號(hào) | 方法 | 描述 |
|---|---|---|
| 1 | BinaryRead |
對(duì)當(dāng)前輸入流執(zhí)行指定字節(jié)數(shù)的二進(jìn)制讀取。 |
| 2 | Equals(Object) |
確定指定的對(duì)象是否等于當(dāng)前對(duì)象。 (從object繼承。) |
| 3 | GetType |
獲取當(dāng)前實(shí)例的類型。 |
| 4 | MapImageCoordinates |
將傳入的圖像字段形式參數(shù)映射到適當(dāng)?shù)?code>x坐標(biāo)和y坐標(biāo)值。 |
| 5 | MapPath(String) |
將指定的虛擬路徑映射到物理路徑。 |
| 6 | SaveAs |
將HTTP請(qǐng)求保存到磁盤。 |
| 7 | ToString |
返回表示當(dāng)前對(duì)象的字符串。 |
| 8 | ValidateInput |
對(duì)通過(guò)Cookies,Form和QueryString屬性訪問(wèn)的集合進(jìn)行驗(yàn)證。 |
Response對(duì)象表示服務(wù)器對(duì)客戶端請(qǐng)求的響應(yīng)。 它是System.Web.HttpResponse類的一個(gè)實(shí)例。
在ASP.NET中,響應(yīng)對(duì)象在向客戶端發(fā)送HTML文本時(shí)不起任何重要作用,因?yàn)榉?wù)器端控件具有嵌套的,面向?qū)ο蟮姆椒▉?lái)呈現(xiàn)自己。
但是,HttpResponse對(duì)象仍然提供了一些重要的功能,如Cookie功能和Redirect()方法。 Response.Redirect()方法允許將用戶轉(zhuǎn)移到另一個(gè)頁(yè)面。
Response對(duì)象的屬性和方法
下表提供了Response對(duì)象的一些值得注意的屬性:
| 編號(hào) | 屬性 | 描述 |
|---|---|---|
| 1 | Buffer |
獲取或設(shè)置一個(gè)值,指示是否緩沖輸出并在完成響應(yīng)完成處理后發(fā)送。 |
| 2 | BufferOutput |
獲取或設(shè)置一個(gè)值,指示是否在完成頁(yè)面處理完成后緩存輸出并發(fā)送。 |
| 3 | Charset |
獲取或設(shè)置輸出流的HTTP字符集。 |
| 4 | ContentEncoding |
獲取或設(shè)置輸出流的HTTP字符集。 |
| 5 | ContentType |
獲取或設(shè)置輸出流的HTTP MIME類型。 |
| 6 | Cookies |
獲取響應(yīng)cookie集合。 |
| 7 | Expires |
獲取或設(shè)置在瀏覽器上緩存的頁(yè)面到期之前的分鐘數(shù)。 |
| 8 | ExpiresAbsolute |
獲取或設(shè)置從緩存中刪除緩存信息的絕對(duì)日期和時(shí)間。 |
| 9 | HeaderEncoding |
獲取或設(shè)置一個(gè)編碼對(duì)象,該對(duì)象表示當(dāng)前標(biāo)題輸出流的編碼。 |
| 10 | Headers |
獲取響應(yīng)標(biāo)頭的集合。 |
| 11 | IsClientConnected |
獲取一個(gè)值,指示客戶端是否仍連接到服務(wù)器。 |
| 12 | Output |
啟用將文本輸出到傳出的HTTP響應(yīng)流。 |
| 13 | OutputStream |
啟用二進(jìn)制輸出到傳出HTTP內(nèi)容主體。 |
| 14 | RedirectLocation |
獲取或設(shè)置Http Location標(biāo)頭的值。 |
| 15 | Status |
設(shè)置返回給客戶端的狀態(tài)行。 |
| 16 | StatusCode |
獲取或設(shè)置返回給客戶端的輸出的HTTP狀態(tài)碼。 |
| 17 | StatusDescription |
獲取或設(shè)置返回給客戶端的輸出的HTTP狀態(tài)字符串。 |
| 18 | SubStatusCode |
獲取或設(shè)置一個(gè)限定響應(yīng)狀態(tài)碼的值。 |
| 19 | SuppressContent |
獲取或設(shè)置一個(gè)值,指示是否向客戶端發(fā)送HTTP內(nèi)容。 |
下表列出了一些重要的方法:
| 編號(hào) | 方法 | 描述 |
|---|---|---|
| 1 | AddHeader |
將HTTP標(biāo)頭添加到輸出流。提供AddHeader是為了與早期版本的ASP兼容。 |
| 2 | AppendCookie |
基礎(chǔ)架構(gòu)將HTTP cookie添加到內(nèi)部cookie集合中。 |
| 3 | AppendHeader |
將HTTP標(biāo)頭添加到輸出流。 |
| 4 | AppendToLog |
將自定義日志信息添加到InterNET信息服務(wù)(IIS)日志文件。 |
| 5 | BinaryWrite |
將一串二進(jìn)制字符寫入HTTP輸出流。 |
| 6 | ClearContent |
清除緩沖流中的所有內(nèi)容輸出。 |
| 7 | Close |
關(guān)閉與客戶端的套接字連接。 |
| 8 | End |
將所有當(dāng)前緩沖的輸出發(fā)送到客戶端,停止頁(yè)面的執(zhí)行,并引發(fā)EndRequest事件。 |
| 9 | Equals(Object) |
確定指定的對(duì)象(Object)是否等于當(dāng)前對(duì)象。 |
| 10 | Flush |
將所有當(dāng)前緩沖的輸出發(fā)送到客戶端。 |
| 11 | GetType |
獲取當(dāng)前實(shí)例的類型。 |
| 12 | Pics |
將HTTP PICS-Label標(biāo)頭附加到輸出流。 |
| 13 | Redirect(String) |
將請(qǐng)求重定向到新的URL并指定新的URL。 |
| 14 | Redirect(String, Boolean) |
將客戶端重定向到新的URL。指定新的URL以及當(dāng)前頁(yè)面的執(zhí)行是否應(yīng)該終止。 |
| 15 | SetCookie |
更新cookie集合中的現(xiàn)有cookie。 |
| 16 | ToString |
返回表示當(dāng)前對(duì)象的字符串。 |
| 17 | TransmitFile(String) |
將指定的文件直接寫入HTTP響應(yīng)輸出流,而不將其緩沖在內(nèi)存中。 |
| 18 | Write(Char) |
將一個(gè)字符寫入HTTP響應(yīng)輸出流。 |
| 19 | Write(Object) |
將對(duì)象寫入HTTP響應(yīng)流。 |
| 20 | Write(String) |
將一個(gè)字符串寫入HTTP響應(yīng)輸出流。 |
| 21 | WriteFile(String) |
將指定文件的內(nèi)容直接寫入HTTP響應(yīng)輸出流作為文件塊。 |
| 22 | WriteFile(String, Boolean) |
將指定文件的內(nèi)容直接寫入HTTP響應(yīng)輸出流作為內(nèi)存塊。 |
下面的簡(jiǎn)單例子有一個(gè)文本框控件,用戶可以輸入名字,一個(gè)按鈕將信息發(fā)送到服務(wù)器,一個(gè)標(biāo)簽控件用于顯示客戶端的URL。
打開Visual Studio,創(chuàng)建一個(gè)空的網(wǎng)站項(xiàng)目:ServerSide,參考下圖 -

在項(xiàng)目名稱上點(diǎn)擊右鍵,并添加一個(gè)Web窗體文件(Defualt.aspx),參考下圖 -

其內(nèi)容如下:
<%@ 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>服務(wù)器端示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="請(qǐng)輸入姓名:"></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/> 當(dāng)前 URL 是 " + Server.UrlEncode(Request.Url.ToString());
}
}
}
運(yùn)行該項(xiàng)目(頁(yè)面),得到類似以下結(jié)果:

輸入一個(gè)名字:Yiibai,然后提交,得到以下結(jié)果 -
