ASP.NET Web 頁面語法概覽
已創建的 ASP.NET Web 頁面類似於靜態 HTML Web 頁面(即不包括基於伺服器端處理的頁面),但是它們包括了被 ASP.NET 所認可的額外元素,並且在頁面運行的時候進行處理。ASP.NET Web 頁面區別於靜態 HTML(或者其他)頁面的特徵如下:
把 .htm,.html 的文件擴展名換成 .aspx。擁有 .aspx 文件擴展名的頁面文件會被 ASP.NET 進行處理。
提示:ASP.NET 的文件名擴展映射是在 Internet Information Services(IIS)中被完成的。默認時,.aspx 頁面是由 ASP.NET 運行的,而 .htm 和 .html 頁面則不是。
一個可選的 @ Page 指令或者其他與你所創建的頁面類型相匹配的其他指令。
一個正確地為 ASP.NET 所配置的 form 元素。這個 form 元素是唯一在你需要在頁面處理期間使用頁面控制項時所必需的。
Web 伺服器端控制項。
伺服器端代碼,如果你在頁面中添加了代碼的話。
提示:如果你想要讓你的頁面與 XHTML 標準相匹配的話,那麼你就必須包含額外的元素,比如 DOCTYPE 元素。詳細內容請參考[ASP.NET 與 XHTML]。
以下部分分別為這些元素提供了更多的細節。
你可以把任何 HTML 頁面的名稱都改成 .aspx 文件名擴展並且會被當成 ASP.NET Web 頁面來運行。但是,如果頁面沒有包括伺服器端處理,那麼你就不需要再添加 .aspx 文件擴展名,因為這樣做會增加頁面的處理時間。
ASP.NET Web 頁面範例
以下代碼示範了一個頁面,該頁面包含了一些用來組成 ASP.NET Web 頁面的基本元素。該頁面包含了你想要在 HTML 頁面中所使用的靜態文字,並且與特定的 ASP.NET 元素一起被使用。代碼中的 ASP.NET 專用的元素被高亮顯示。
提示:為了更加清楚,這個範例頁面並沒有遵循 XHTML 標準。詳細內容請參考[ASP.NET 與 XHTML]。
安全提示:這個範例頁面包含一個文本輸入框用來接收用戶輸入,然而這是一個潛在的安全威脅。默認時,ASP.NET Web 頁面會驗證用戶輸入中是否包含腳本與 HTML 元素。更多信息請參考[腳本開發概覽]。
<%@ Page Language="C#" %><html><script runat="server"> void Button1_Click(Object sender, EventArgs e) Label1.Text = "歡迎," + TextBox1.Text; End Sub</script><head runat="server"> <title>基本的 ASP.NET Web 頁面</title></head><body> <form id="form1" runat="server"> <h1>歡迎使用 ASP.NET</h1> <p>輸入你的名字然後點擊按鈕。</p> <p> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Click" OnClick="Button1_Click" /> </p> <p> <asp:Label ID="Label1" runat="server"></asp:Label> </p> </form></body>
@ 指令
ASP.NET 頁面通常會包含一些指令以允許你為頁面指定頁面屬性和配置信息。這些指令被用來指示 ASP.NET 如何對頁面進行處理,但是它們並不會被呈現成標記的一部分也不會被發送到瀏覽器。
最常被使用的指令就是 @ Page,它允許你為頁面指定許多配置選項,其中包括:
頁面代碼中的伺服器端編程語言。
頁面既可以直接包含伺服器端代碼(被稱為單文件頁面),也可以把代碼保存在單獨的類文件中(被稱為幕後代碼頁面)。前面範例中的頁面就是一個單文件頁面;代碼是直接編寫在頁面中的,並且 @ Page 指令也沒有包含關於類文件的鏈接。更多信息請參考[ASP.NET Web 頁面的代碼模型]。
調試與追蹤選項。
如果頁面擁有一個相關聯的控制頁,那麼它就應該被視為一個內容頁面。
如果你沒有在頁面中包含一個 @ Page 指令,或者如果該指令沒有包含特定的設置,那麼這些設置就會從 Web 應用程序的配置文件(Web.config 文件)或者從站點配置文件(Machine.config 文件)中得到繼承。
除了包含 @ Page 指令之外,你也可以包含支持額外的頁面選項的其他指令。這些公共指令如下:
@ Import
這個指令允許你指定需要引用到代碼中的命名空間。
@ OutputCache
這個指令允許你指定頁面是否被緩存,連同指定緩存開始時間與緩存期限的參數一起來對頁面進行緩存。
@ Implements
這個指令允許你指定頁面所實現的 .NET 介面。
@ Register
這個指令允許你註冊在頁面中所使用的額外控制項。@ Register 指令聲明了該控制項的前綴標記以及控制項彙編集的位置。如果你要把用戶控制項或者自定義的 ASP.NET 控制項添加到頁面中,那麼你就必須使用這個指令。
有些特定類型的 ASP.NET 文件需要使用到除 @ Page 之外的其他指令。例如,ASP.NET 控制頁就會使用一個 @ Master 指令,而 ASP.NET 用戶控制項則會使用一個 @ Control 指令。每種指令都允許你為適當的文件指定不同的選項。
詳細信息請參考[ASP.NET Master Page 概覽和 ASP.NET 用戶控制項]。
窗體元素
如果你的頁面包含了允許用戶進行交互並且可被提交的控制項,那麼這個頁面就必須包含一個 form 元素。你可以使用 HTML 的 form 元素,但是必須應用特定的規則。使用 form 元素的規則如下:
頁面只能夠包含唯一一個 form 元素。
這個 form 元素必須包含值被設置成 server 的 runat 特性。這個特性允許你提交窗體和能夠在伺服器代碼中進行編程的頁面控制項。
可以完成回傳的伺服器控制項必須被包含在 form 元素中。
開始標記中不能夠包含有 action 特性。因為 ASP.NET 會在頁面被處理的時候動態設置這些特性,並且覆蓋所有可能的設置。
Web 伺服器端控制項
在多數 ASP.NET 頁面中,你需要添加控制項以允許用戶與頁面進行交互,包括按鈕、文本輸入框,列表等等。這些 Web 伺服器控制項與 HTML 按鈕與輸入元素是類似的。無論如何,它們都是在伺服器端被處理的,並且允許你使用伺服器端代碼來設置它們的屬性。這些控制項同樣可以觸發能夠在伺服器端代碼中被處理的多種事件。
伺服器端控制項使用的是一種特別的語法,並且這種語法在頁面運行的時候是被 ASP.NET 所認可的。下列代碼範例就說明了一些典型的 Web 伺服器端控制項。
安全提示:文本輸入框會接收用戶輸入,然而這是一個潛在的安全威脅。默認時,ASP.NET Web 頁面會驗證用戶輸入是否包含腳本與 HTML 元素。更多信息請參考[腳本開發概覽]。
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Click" OnClick="Button1_Click" />
ASP.NET 伺服器端控制項的標記名稱由一個前綴開始,在這裡是 asp:。如果控制項不是 .NET Framework 的一部分的話,這個前綴也許會有所不同。ASP.NET 伺服器端控制項同樣包含 runat="server" 特性以及一個可選的 ID 特性,你可以在伺服器端代碼中用來對控制項進行引用。
頁面一旦運行,它就會伺服器端控制項進行識別並且運行與這些控制項相關聯的代碼。大多數控制項都會把 HTML 或者其他標記呈現到頁面中。例如,asp:textbox 控制項會把一個擁有 type="text" 特性的 input 元素呈現在頁面中。然而,這些映射並不需要在 Web 伺服器控制項與 HTML 元素之間進行一一對應。例如,asp:calendar 控制項就會呈現一個 HTML 表格。還有一些控制項不會呈現任何內容給瀏覽器;相反,它們只在伺服器端才能夠被處理,並且只為其他控制項提供信息。
作為伺服器端控制項的 HTML 元素
作為使用 ASP.NET 伺服器端控制項的替代,你可以把普通的 HTML 元素當成伺服器端控制項使用。你可以為頁面中的任何 HTML 元素添加 runat="server" 特性和 ID 特性。當頁面運行的時候,ASP.NET 就會把這些元素識別成為伺服器端控制項並且讓它在伺服器端代碼中變得可用。例如,你可以在 HTML body 元素中添加必需的元素,如下代碼範例所示。
<body runat="server" id="body">
然後你就可以在伺服器端代碼中對這個 body 元素進行引用了,例如,在運行時設置主體的背景顏色來響應用戶的輸入或者來自於資料庫的信息。
更多信息請參考[ASP.NET Web 伺服器端控制項]。
伺服器端代碼
多數 ASP.NET 頁面都包含了頁面被處理之後能夠在伺服器端所運行的代碼。並且 ASP.NET 還支持許多種的編程語言,包括 C#、Visual Basic、J#、JScript,以及其他。
ASP.NET 支持兩種模型來編寫頁面的伺服器端代碼。在單文件模型中,頁面代碼位於開始標記中包含有 runat="server" 特性的 script 元素中。本文中先前的範例就屬於單文件模型。
作為選擇,你也可以在單獨的類文件中創建頁面代碼,這就是幕後代碼模型。在這種情況下,ASP.NET Web 頁面通常不需要包含任何伺服器代碼。另外,@ Page 指令還包含了 .aspx 頁面以及與它所關聯的幕後代碼文件的鏈接信息。下面的代碼範例就說明了一個在幕後代碼文件模型中所使用的 @ Page 指令。
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="Default" %>
CodeFile 特性指定了類文件的名稱,而 Inherits 特性指定了幕後代碼文件中與頁面進行通訊的類名稱。
更多信息請參考[ASP.NET Web 頁面代碼模型]。
提示:ASP.NET Web 頁面同樣可以包含運行在瀏覽器中並且響應客戶端事件的客戶端腳本。並且一個 ASP.NET 頁面中能夠同時包含客戶端腳本與伺服器端代碼。更多信息請參考[使用客戶端腳本的 ASP.NET Web 頁面編程]。
分類: ASP.NET / Web 頁面語法概覽推薦閱讀:
※C#多線程技術提高RabbitMQ消費吞吐率(二)
※MYC編譯器源碼分析之程序入口
※乾貨 || .NET逆向工程 (一)
※BugTracker.NET 漢化手札
※C#網路編程技術微軟Socket實戰項目演練(三)