在這章中,我們研究頁面生命週期以及頁面如何包含各種控制元件。頁面本身被範例化為一個控制物件。所有的Web表單基本上都是ASP.NET Page
類的範例。 Page
類具有以下對應於內部物件的非常有用的屬性:
我們將在適當的時候討論這些物件。在本教學中,我們將學習Server
物件,Request
物件和Response
物件。
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
物件是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物件表示伺服器對用戶端請求的響應。 它是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());
}
}
}
執行該專案(頁面),得到類似以下結果:
輸入一個名字:Yiibai,然後提交,得到以下結果 -