已創(chuàng)建的 ASP.NET Web 頁(yè)面類(lèi)似于靜態(tài) HTML Web 頁(yè)面(即不包括基于服務(wù)器端處理的頁(yè)面),但是它們包括了被 ASP.NET 所認(rèn)可的額外元素,并且在頁(yè)面運(yùn)行的時(shí)候進(jìn)行處理。ASP.NET Web 頁(yè)面區(qū)別于靜態(tài) HTML(或者其他)頁(yè)面的特征如下:
把 .htm,.html 的文件擴(kuò)展名換成 .aspx。擁有 .aspx 文件擴(kuò)展名的頁(yè)面文件會(huì)被 ASP.NET 進(jìn)行處理。
提示:ASP.NET 的文件名擴(kuò)展映射是在 Internet Information Services(IIS)中被完成的。默認(rèn)時(shí),.aspx 頁(yè)面是由 ASP.NET 運(yùn)行的,而 .htm 和 .html 頁(yè)面則不是。
一個(gè)可選的 @ Page 指令或者其他與你所創(chuàng)建的頁(yè)面類(lèi)型相匹配的其他指令。
一個(gè)正確地為 ASP.NET 所配置的 form 元素。這個(gè) form 元素是唯一在你需要在頁(yè)面處理期間使用頁(yè)面控件時(shí)所必需的。
Web 服務(wù)器端控件。
服務(wù)器端代碼,如果你在頁(yè)面中添加了代碼的話(huà)。
提示:如果你想要讓你的頁(yè)面與 XHTML 標(biāo)準(zhǔn)相匹配的話(huà),那么你就必須包含額外的元素,比如 DOCTYPE 元素。詳細(xì)內(nèi)容請(qǐng)參考[ASP.NET 與 XHTML]。
以下部分分別為這些元素提供了更多的細(xì)節(jié)。
你可以把任何 HTML 頁(yè)面的名稱(chēng)都改成 .aspx 文件名擴(kuò)展并且會(huì)被當(dāng)成 ASP.NET Web 頁(yè)面來(lái)運(yùn)行。但是,如果頁(yè)面沒(méi)有包括服務(wù)器端處理,那么你就不需要再添加 .aspx 文件擴(kuò)展名,因?yàn)檫@樣做會(huì)增加頁(yè)面的處理時(shí)間。
以下代碼示范了一個(gè)頁(yè)面,該頁(yè)面包含了一些用來(lái)組成 ASP.NET Web 頁(yè)面的基本元素。該頁(yè)面包含了你想要在 HTML 頁(yè)面中所使用的靜態(tài)文字,并且與特定的 ASP.NET 元素一起被使用。代碼中的 ASP.NET 專(zhuān)用的元素被高亮顯示。
提示:為了更加清楚,這個(gè)范例頁(yè)面并沒(méi)有遵循 XHTML 標(biāo)準(zhǔn)。詳細(xì)內(nèi)容請(qǐng)參考[ASP.NET 與 XHTML]。
安全提示:這個(gè)范例頁(yè)面包含一個(gè)文本輸入框用來(lái)接收用戶(hù)輸入,然而這是一個(gè)潛在的安全威脅。默認(rèn)時(shí),ASP.NET Web 頁(yè)面會(huì)驗(yàn)證用戶(hù)輸入中是否包含腳本與 HTML 元素。更多信息請(qǐng)參考[腳本開(kāi)發(fā)概覽]。
<%@ 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 頁(yè)面</title></head><body> <form id="form1" runat="server"> <h1>歡迎使用 ASP.NET</h1> <p>輸入你的名字然后點(diǎn)擊按鈕。</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 頁(yè)面通常會(huì)包含一些指令以允許你為頁(yè)面指定頁(yè)面屬性和配置信息。這些指令被用來(lái)指示 ASP.NET 如何對(duì)頁(yè)面進(jìn)行處理,但是它們并不會(huì)被呈現(xiàn)成標(biāo)記的一部分也不會(huì)被發(fā)送到瀏覽器。
最常被使用的指令就是 @ Page,它允許你為頁(yè)面指定許多配置選項(xiàng),其中包括:
頁(yè)面代碼中的服務(wù)器端編程語(yǔ)言。
頁(yè)面既可以直接包含服務(wù)器端代碼(被稱(chēng)為單文件頁(yè)面),也可以把代碼保存在單獨(dú)的類(lèi)文件中(被稱(chēng)為幕后代碼頁(yè)面)。前面范例中的頁(yè)面就是一個(gè)單文件頁(yè)面;代碼是直接編寫(xiě)在頁(yè)面中的,并且 @ Page 指令也沒(méi)有包含關(guān)于類(lèi)文件的鏈接。更多信息請(qǐng)參考[ASP.NET Web 頁(yè)面的代碼模型]。
調(diào)試與追蹤選項(xiàng)。
如果頁(yè)面擁有一個(gè)相關(guān)聯(lián)的控制頁(yè),那么它就應(yīng)該被視為一個(gè)內(nèi)容頁(yè)面。
如果你沒(méi)有在頁(yè)面中包含一個(gè) @ Page 指令,或者如果該指令沒(méi)有包含特定的設(shè)置,那么這些設(shè)置就會(huì)從 Web 應(yīng)用程序的配置文件(Web.config 文件)或者從站點(diǎn)配置文件(Machine.config 文件)中得到繼承。
除了包含 @ Page 指令之外,你也可以包含支持額外的頁(yè)面選項(xiàng)的其他指令。這些公共指令如下:
這個(gè)指令允許你指定需要引用到代碼中的命名空間。
這個(gè)指令允許你指定頁(yè)面是否被緩存,連同指定緩存開(kāi)始時(shí)間與緩存期限的參數(shù)一起來(lái)對(duì)頁(yè)面進(jìn)行緩存。
這個(gè)指令允許你指定頁(yè)面所實(shí)現(xiàn)的 .NET 接口。
這個(gè)指令允許你注冊(cè)在頁(yè)面中所使用的額外控件。@ Register 指令聲明了該控件的前綴標(biāo)記以及控件匯編集的位置。如果你要把用戶(hù)控件或者自定義的 ASP.NET 控件添加到頁(yè)面中,那么你就必須使用這個(gè)指令。
有些特定類(lèi)型的 ASP.NET 文件需要使用到除 @ Page 之外的其他指令。例如,ASP.NET 控制頁(yè)就會(huì)使用一個(gè) @ Master 指令,而 ASP.NET 用戶(hù)控件則會(huì)使用一個(gè) @ Control 指令。每種指令都允許你為適當(dāng)?shù)奈募付ú煌倪x項(xiàng)。
詳細(xì)信息請(qǐng)參考[ASP.NET Master Page 概覽和 ASP.NET 用戶(hù)控件]。
如果你的頁(yè)面包含了允許用戶(hù)進(jìn)行交互并且可被提交的控件,那么這個(gè)頁(yè)面就必須包含一個(gè) form 元素。你可以使用 HTML 的 form 元素,但是必須應(yīng)用特定的規(guī)則。使用 form 元素的規(guī)則如下:
頁(yè)面只能夠包含唯一一個(gè) form 元素。
這個(gè) form 元素必須包含值被設(shè)置成 server 的 runat 特性。這個(gè)特性允許你提交窗體和能夠在服務(wù)器代碼中進(jìn)行編程的頁(yè)面控件。
可以完成回傳的服務(wù)器控件必須被包含在 form 元素中。
開(kāi)始標(biāo)記中不能夠包含有 action 特性。因?yàn)?ASP.NET 會(huì)在頁(yè)面被處理的時(shí)候動(dòng)態(tài)設(shè)置這些特性,并且覆蓋所有可能的設(shè)置。
在多數(shù) ASP.NET 頁(yè)面中,你需要添加控件以允許用戶(hù)與頁(yè)面進(jìn)行交互,包括按鈕、文本輸入框,列表等等。這些 Web 服務(wù)器控件與 HTML 按鈕與輸入元素是類(lèi)似的。無(wú)論如何,它們都是在服務(wù)器端被處理的,并且允許你使用服務(wù)器端代碼來(lái)設(shè)置它們的屬性。這些控件同樣可以觸發(fā)能夠在服務(wù)器端代碼中被處理的多種事件。
服務(wù)器端控件使用的是一種特別的語(yǔ)法,并且這種語(yǔ)法在頁(yè)面運(yùn)行的時(shí)候是被 ASP.NET 所認(rèn)可的。下列代碼范例就說(shuō)明了一些典型的 Web 服務(wù)器端控件。
安全提示:文本輸入框會(huì)接收用戶(hù)輸入,然而這是一個(gè)潛在的安全威脅。默認(rèn)時(shí),ASP.NET Web 頁(yè)面會(huì)驗(yàn)證用戶(hù)輸入是否包含腳本與 HTML 元素。更多信息請(qǐng)參考[腳本開(kāi)發(fā)概覽]。
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Click" OnClick="Button1_Click" />
ASP.NET 服務(wù)器端控件的標(biāo)記名稱(chēng)由一個(gè)前綴開(kāi)始,在這里是 asp:。如果控件不是 .NET Framework 的一部分的話(huà),這個(gè)前綴也許會(huì)有所不同。ASP.NET 服務(wù)器端控件同樣包含 runat="server" 特性以及一個(gè)可選的 ID 特性,你可以在服務(wù)器端代碼中用來(lái)對(duì)控件進(jìn)行引用。
頁(yè)面一旦運(yùn)行,它就會(huì)服務(wù)器端控件進(jìn)行識(shí)別并且運(yùn)行與這些控件相關(guān)聯(lián)的代碼。大多數(shù)控件都會(huì)把 HTML 或者其他標(biāo)記呈現(xiàn)到頁(yè)面中。例如,asp:textbox 控件會(huì)把一個(gè)擁有 type="text" 特性的 input 元素呈現(xiàn)在頁(yè)面中。然而,這些映射并不需要在 Web 服務(wù)器控件與 HTML 元素之間進(jìn)行一一對(duì)應(yīng)。例如,asp:calendar 控件就會(huì)呈現(xiàn)一個(gè) HTML 表格。還有一些控件不會(huì)呈現(xiàn)任何內(nèi)容給瀏覽器;相反,它們只在服務(wù)器端才能夠被處理,并且只為其他控件提供信息。
作為使用 ASP.NET 服務(wù)器端控件的替代,你可以把普通的 HTML 元素當(dāng)成服務(wù)器端控件使用。你可以為頁(yè)面中的任何 HTML 元素添加 runat="server" 特性和 ID 特性。當(dāng)頁(yè)面運(yùn)行的時(shí)候,ASP.NET 就會(huì)把這些元素識(shí)別成為服務(wù)器端控件并且讓它在服務(wù)器端代碼中變得可用。例如,你可以在 HTML body 元素中添加必需的元素,如下代碼范例所示。
<body runat="server" id="body">
然后你就可以在服務(wù)器端代碼中對(duì)這個(gè) body 元素進(jìn)行引用了,例如,在運(yùn)行時(shí)設(shè)置主體的背景顏色來(lái)響應(yīng)用戶(hù)的輸入或者來(lái)自于數(shù)據(jù)庫(kù)的信息。
更多信息請(qǐng)參考[ASP.NET Web 服務(wù)器端控件]。
多數(shù) ASP.NET 頁(yè)面都包含了頁(yè)面被處理之后能夠在服務(wù)器端所運(yùn)行的代碼。并且 ASP.NET 還支持許多種的編程語(yǔ)言,包括 C#、Visual Basic、J#、JScript,以及其他。
ASP.NET 支持兩種模型來(lái)編寫(xiě)頁(yè)面的服務(wù)器端代碼。在單文件模型中,頁(yè)面代碼位于開(kāi)始標(biāo)記中包含有 runat="server" 特性的 script 元素中。本文中先前的范例就屬于單文件模型。
作為選擇,你也可以在單獨(dú)的類(lèi)文件中創(chuàng)建頁(yè)面代碼,這就是幕后代碼模型。在這種情況下,ASP.NET Web 頁(yè)面通常不需要包含任何服務(wù)器代碼。另外,@ Page 指令還包含了 .aspx 頁(yè)面以及與它所關(guān)聯(lián)的幕后代碼文件的鏈接信息。下面的代碼范例就說(shuō)明了一個(gè)在幕后代碼文件模型中所使用的 @ Page 指令。
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="Default" %>
CodeFile 特性指定了類(lèi)文件的名稱(chēng),而 Inherits 特性指定了幕后代碼文件中與頁(yè)面進(jìn)行通訊的類(lèi)名稱(chēng)。
更多信息請(qǐng)參考[ASP.NET Web 頁(yè)面代碼模型]。
提示:ASP.NET Web 頁(yè)面同樣可以包含運(yùn)行在瀏覽器中并且響應(yīng)客戶(hù)端事件的客戶(hù)端腳本。并且一個(gè) ASP.NET 頁(yè)面中能夠同時(shí)包含客戶(hù)端腳本與服務(wù)器端代碼。更多信息請(qǐng)參考[使用客戶(hù)端腳本的 ASP.NET Web 頁(yè)面編程]。
聯(lián)系客服