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

在項目名稱上點擊右鍵,并添加一個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="請輸入姓名:"></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());
}
}
}
運行該項目(頁面),得到類似以下結(jié)果:

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