ASP.NET Web窗體頁面框架元件是一個可縮放的通用語言執行時間程式設計模型,它可以用於動態地產生Web頁面。 ASP.NET頁面框架元件是ASP的合理演化(ASP.NET提供的語法與現有的頁面是相容的),它被刻意設計用於解決早期模型中的大量的關鍵的缺陷。特別是,它提供了建立和使用可供重複使用的(reusable)UI控制項的能力,這些控制項可以封裝公用的功能,從而減少了頁面開發者需要編寫的程式碼數量;它使開發者能夠清晰有序地建構頁面邏輯(並非「纏繞在一起的程式碼」);它所使用的開發工具提供了強大的WYSIWYG(所見即所得)頁面設計支援能力(現有的傳統ASP程式碼是不透明的)。本文介紹ASP.NET頁面特性的一些基本知識。
寫第一個ASP.NET頁面
ASP.NET頁面是帶有.aspx副檔名的文字檔。頁面由程式碼和標記(tag)組成,它們在伺服器上動態地編譯和執行,為提出請求的客戶端瀏覽器(或裝置)產生顯示內容。它們可以被部署在IIS虛擬目錄樹之下。當瀏覽器客戶端請求.aspx資源的時候,ASP.NET運行時(runtime)對目標文件進行分析,並把它編譯成.NET框架類,這個類接下來就可以用於動態地處理請求了(請注意,.aspx檔案只在第一次被存取的時候才編譯,編譯形成的型別實例以後供多個請求重複使用)。
我們不用修改HTML檔案中的程式碼,只要要把它的副檔名改成.aspx,就建立了一個ASP.NET頁面。例如,下面的範例示範了一個簡單的HTML頁面,它收集使用者的姓名和類別,當使用者點擊按鈕的時候就把窗體(form)發回原頁面:
<form action="intro1_vb.aspx" method= "post">
<h3> Name: <input id="Name" type=text>
Category: <select id="Category" size=1>
<option>psychology</option>
<option>business</option>
<option>popular_comp</option>
</select>
<input type=submit value="Lookup">
</h3>
</form>
請注意:當你點擊「Lookup」按鈕的時候沒有發生任何事情,這是由於該.aspx檔案只包含了靜態HTML(沒有動態內容)。因此,相同的HTML被傳回客戶端,從而導致窗體欄位(文字方塊和下拉清單)內容遺失。
在頁面上新增簡單的程式碼
ASP.NET提供的語法與ASP頁面是相容的。它支援<% %>程式碼呈現(render)區塊,在.aspx檔案中它可以與HTML內容混合使用。在頁面顯示的時候,這些程式碼區塊會嚴格地執行。
以下的範例示範如何在HTML中使用<% %>呈現區塊(每次增加字體的尺寸):
<form action="intro2_vb.aspx" method="post">
<h3> Name: <input id="Name" type=text>
Category: <select id="Category" size=1>
<option>psychology</option>
<option>business</option>
<option>popular_comp</option>
</select>
</h3>
<input type=submit value="Lookup">
<p>
<% Dim I As Integer
For I = 0 to 7 %>
<font size="<%=I%>"> Welcome to ASP.NET </font> <br>
<% Next %>
</form>
請注意:上面的例子中的<% %>程式碼區塊與ASP不同,它會被真正地編譯-而不是由腳本引擎來解釋。這改善了運行時的執行效能。
ASP.NET頁面開發者可以使用<% %>程式碼區塊動態地修改HTML輸出資訊。例如,以下的程式碼示範如何使用<% %>程式碼區塊來解釋客戶端發回的結果:
<form action="intro3_vb.aspx">
<h3> Name: <input name="Name" type=text value="<%=HttpUtility.HtmlEncode(Request.QueryString("Name"))%>">
Category: <select name="Category" size=1>
<%
Dim I As Integer
Dim Values(2) As String
Values(0) = "psychology"
Values(1) = "business"
Values(2) = "popular_comp"
For I = 0 To Values.Length - 1
%>
<% If (Request.QueryString("Category") = Values(i)) %>
<option selected>
<% Else %>
<option>
<% End If %>
<%=Values(i)%>
</option>
<% Next %>
</select>
</h3>
<input type=submit name="Lookup" value="Lookup">
<p>
<% If (Not Request.QueryString("Lookup") = Nothing) %>
Hi <%=HttpUtility.HtmlEncode(Request.QueryString("Name")) %>, you selected: <%=HttpUtility.HtmlEncode(Request.QueryString("Category")) %>
<% End If %>
</form>
請注意:儘管<% %>程式碼區塊為我們客製化ASP.NET頁面傳回的文字輸出資訊提供了強大的途徑,但是它們沒有提供清晰的HTML程式設計模型。上面的範例顯示,僅使用<% %>程式碼區塊的開發者必須自行管理頁面的狀態、自行截取被傳送的值。