[ASP.NET 教程] 三. Web Forms編程模型
最後更新:2017-02-28
來源:互聯網
上載者:User
asp.net|web|編程|教程
1. Web Forms編程模型
Web Forms中的使用者介面是由HTML和伺服器控制項共同描述的。每個控制項標籤都對應了一個伺服器上的實際的對象。
控制項觸發的事件是在伺服器端處理的。ASP.NET將用戶端與伺服器端的處理“融合”到一起,看起來就好像事件是在同一端被觸發和處理的,而事實上是用戶端事件導致瀏覽器產生回傳,於是伺服器端對象觸發事件。
<script></script>塊中的伺服器端代碼並不能稱為指令碼,它是被編譯然後啟動並執行,而不是解釋執行,所以它的執行效率會比ASP指令碼高很多。
標籤中的runat=”server”屬性是ASP.NET頁面的關鍵,它讓伺服器“執行”標籤,而不是將標籤文本返回給用戶端,所以在需要ASP.NET處理的標籤上都必須添加runat=”server”。
2. Web控制項
前面例子中的TextBox,Button,Label都是Web控制項。它們是在System.Web.UI.WebControls名稱空間中定義的伺服器控制項,其他具體的控制項可以查閱.NET Framework SDK文檔,它們都可以在ASP.NET Web Forms中使用,其中有簡單的控制項,如Label,也有相當複雜的控制項,如DataGrid。
3. HTML 控制項
HTML控制項是ASP.NET 的另一種伺服器控制項,它們定義在System.Web.UI.HtmlControls名稱空間中,具體請查閱.NET Framework SDK文檔,它們通常是在常規的HTML標籤中添加runat="server",比如<input type="text" runat="server" />實際上就是一個System.Web.UI.HtmlControls.HtmlInputText的對象,實際上每個Web Form中的<form runat="server" />標籤就是一個HTML控制項。
4. 頁面事件
並非只有伺服器控制項可以觸發事件,頁面同樣可以。
首先,在介紹頁面事件前,什麼是頁面?下面描述了ASP.NET處理doadd.aspx的過程:
1) 系統建立一個臨時檔案,其中包含了一個由System.Web.UI.Page派生的類,它代表Web頁面。
2) ASP.NET把根據aspx檔案產生的程式碼放到剛剛產生的類中。其中Add方法會稱為產生類的成員。
3) 這個類被編譯為一個dll檔案,存放在系統檔案夾。以後的請求將直接使用這個dll檔案,而不會重複1,2步,除非源檔案已被改變。
4) 請求頁面時,ASP.NET執行個體化這個派生的類,然後“執行”它,Page對象執行個體化其中的所有控制項,將它們的輸出發送到瀏覽器。
如果安裝了.NET Framework SDK 1.1可以查看下面這張圖來瞭解這個過程:
ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/vbderivedpagebaseclasstowebformoutput.gif
.NET Framework SDK文檔描述了Page類的所有事件,這裡僅介紹幾個重要的
Page.Load事件
Page.Load事件在頁面載入時觸發,我們通常在Load事件處理中通過Page.IsPostBack屬性來判斷頁面時第一次載入還是產生回傳後載入的。IsPostBack是非常重要的屬性,如果IsPostBack為true則表示產生了回傳,一般來說,在回傳時不需要初始化控制項,ASP.NET會保持控制項狀態。
Page.Init事件
Page.Init事件在頁面初始化時觸發,PostBack時不會觸發,所以可以在這裡初始化控制項,串連事件處理常式等等。
Page.PreRender事件
PreRender事件在頁面執行完畢,即將呈現介面時觸發,可以在這裡處理頁面的結束動作。
5. 頁面指令
可以在aspx檔案中使用頁面指令,雖然標準的做法是將指令包括在檔案的開頭,但是它們可以位於檔案中的任何位置。每個指令都可以包含一個或多個特定於該指令的屬性。
在所有頁面指令中@Page是最常用的一個,例如:
代碼:
<%@ Page Language="c#" %>
這個條指令設定所有內嵌代碼的語言。比如:
HTML 代碼:
<html>
<body>
Now Time: <% Response.Write(DateTime.Now.ToString()); %>
</body>
</html>
@Page在一個頁面中只能出現一次
@Import指令可以為頁面匯入一個命名空間,例如:
代碼:
<%@ Import Namespace="System.Data" %>
相當於C#代碼:
代碼:
using System.Data;
@Import指令可以多次出現
還有許多其他指令,沒種指令也有很多屬性,這裡不可能詳細介紹,請查閱.NET Framework SDK文檔的相關部分。