ASP.NET2.0頁面框架簡要慨述
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)發回原頁面:
請注意:當你點擊“Lookup”按鈕的時候沒有發生任何事情,這是由于該.aspx文件只包含了靜態HTML(沒有動態內容)。因此,相同的HTML被發回到客戶端,從而導致窗體字段(文本框和下拉列表)內容丟失。
給頁面添加簡單的代碼
ASP.NET提供的語法與ASP頁面是兼容的。它支持<% %>代碼呈現(render)塊,在.aspx文件中它可以與HTML內容混合使用。在頁面顯示的時候,這些代碼塊會嚴格地執行。
下面的例子演示了如何在HTML中使用<% %>呈現塊(每次增加字體的尺寸):
請注意:上面的例子中的<% %>代碼塊與ASP不同,它會被真正地編譯——而不是由腳本引擎來解釋。這改善了運行時的執行性能。
ASP.NET頁面開發者可以使用<% %>代碼塊動態地修改HTML輸出信息。例如,下面的代碼演示了如何使用<% %>代碼塊來解釋客戶端發回的結果:
請注意:盡管<% %>代碼塊為我們定制ASP.NET頁面返回的文本輸出信息提供了強大的途徑,但是它們沒有提供清晰的HTML編程模型。上面的例子顯示,僅使用<% %>代碼塊的開發者必須自己管理頁面的狀態、自己截取被發送的值。
編寫第一個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編程模型。上面的例子顯示,僅使用<% %>代碼塊的開發者必須自己管理頁面的狀態、自己截取被發送的值。