ASP.NET Web 網頁是由兩部分組成:
- 視覺項目,其中包含標記、伺服器控制項和靜態文字。
- 網頁的程式設計邏輯,其中包含事件處理常式和其他程式碼。
ASP.NET 提供兩個模型以管理視覺項目和程式碼:單一檔案網頁模型和程式碼後置網頁模型。兩個模型的功能是相同的,並且您可以在兩個模型上使用相同的控制項和程式碼。
在單一檔案網頁模型中,網頁的標記和程式碼都在相同的實體 .aspx 檔中。程式設計碼是在包含 runat="server" 屬性的 script 區塊中,以便讓其成為 ASP.NET 要執行的程式碼。
script區塊可以包含網頁所需的任何程式碼數量。程式碼可以由網頁上控制項的事件處理常式 (如同在這個範例中)、方法、屬性,以及在類別檔中通常會使用的任何其他程式碼所組成。在執行階段時,單一檔案網頁會被視為衍生自 Page 類別的類別。這個網頁並未包含明確類別宣告,而是由編譯器產生包含控制項做為成員的新類別 (並非所有控制項都會公開做為網頁成員。某些控制項是其他控制項的子系)。網頁中的程式碼會變成類別的一部分。例如,您建立的事件處理常式會變成衍生 Page 類別的成員。
<%@ Page Language="VB" %>
<script runat="server"> Protected Sub Button1_Click(ByVal sender As Object, _ByVal e As System.EventArgs)
Label1.Text = "Clicked at " & DateTime.Now.ToString()
End Sub </script> <html> <head id="Head1" runat="server"> <title>Single-File Page Model</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="Label"> </asp:Label> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button"> </asp:Button> </div> </form> </body> </html>
<%@ Page Language="C#" %>
<script runat="server"> void Button1_Click(Object sender, EventArgs e)
{
Label1.Text = "Clicked at " + DateTime.Now.ToString();
} </script>
<html> <head> <title>Single-File Page Model</title> </head> <body> <form runat="server"> <div> <asp:Label id="Label1" runat="server" Text="Label"> </asp:Label> <br /> <asp:Button id="Button1" runat="server" onclick="Button1_Click" Text="Button"> </asp:Button> </div> </form> </body> </html>
程式碼後置網頁模型可以讓您將標記放在單一檔案 (.aspx 檔),並且將程式碼放在另一個檔案。程式碼檔案的名稱會根據您使用的程式設計語言而有所不同。
注意事項: |
---|
並非所有的 .NET 程式設計語言,都可以讓您建立 ASP.NET Web 網頁的程式碼後置檔案。語言必須支援 partial 類別。例如,J# 不支援 partial 類別,因此不支援建立 ASP.NET 網頁的程式碼後置檔案。
|
例如,如果您使用名為 SamplePage 的網頁,則標記會在 SamplePage.aspx 檔,程式會在名為 SamplePage.aspx.vb (Visual Basic) 或 SamplePage.aspx.cs (C#) 等檔案中。
注意事項: |
---|
.NET Framework 2.0 版中使用的程式碼後置模型與舊版中使用的不同。
|
在程式碼後置模型中,之前章節中所使用的單一檔案網頁範例可以分為兩部分。標記會在一個檔案中 (在這個範例中是 SamplePage.aspx) 並且類似單一檔案網頁,如同下列程式碼範例所示
程式碼後置檔案在預設命名空間中包含完整的類別宣告。然而,類別是使用 partial 關鍵字宣告,表示類別並非完全包含在單一檔案中。而是在網頁執行時,編譯器會讀取 .aspx 網頁以及在 @ Page 指示詞中參考的檔案、將其組成單一類別,然後編譯為單一類別的單元。
partial 類別檔會繼承自網頁 Page 類別
<%@ Page Language="VB" CodeFile="SamplePage.aspx.vb" Inherits="SamplePage" AutoEventWire="false" %> <html> <head runat="server" > <title>Code-Behind Page Model</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label id="Label1" runat="server" Text="Label" > </asp:Label> <br /> <asp:Button id="Button1" runat="server" onclick="Button1_Click" Text="Button" > </asp:Button> </div> </form> </body>
Partial Class SamplePage Inherits System.Web.UI.Page Protected Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = "Clicked at " & DateTime.Now.ToString() End Sub End Class
<%@ Page Language="C#" CodeFile="SamplePage.aspx.cs" Inherits="SamplePage" AutoEventWireup="true" %> <html> <head runat="server" > <title>Code-Behind Page Model</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label id="Label1" runat="server" Text="Label" > </asp:Label> <br /> <asp:Button id="Button1" runat="server" onclick="Button1_Click" Text="Button" > </asp:Button> </div> </form> </body> </html>
using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class SamplePage : System.Web.UI.Page { protected void Button1_Click(object sender, EventArgs e) { Label1.Text = "Clicked at " + DateTime.Now.ToString(); } }
單一檔案和程式碼後置網頁模型的功能相同。在執行階段,模型的執行方式相同,並且兩者之間並沒有效能上的差異。因此選擇網頁模型是依照其他因素而定,例如應用程式中程式碼的組織方式、分開網頁設計和程式碼是否很重要等因素。
注意事項: |
---|
在文件中讀取的範例通常會以單一檔案網頁表示。這主要是為了方便讀者,因為如此就不需要說明每個範例的兩種檔案。在文件中發現單一檔案範例的事實,並不能解釋為偏好單一檔案網頁而不是程式碼後置網頁,也不代表單一檔案網頁有某些其他先天優勢。
|
單一檔案網頁的優點
一般而言,如果網頁的程式碼主要是由網頁上控制項的事件處理常式所組成,則適合使用單一檔案模型。
單一檔案網頁模型的優點如下列所示:
- 在程式碼不多的網頁中,將程式碼和標記放在相同檔案中的便利性,將超越程式碼後置模型的其他優點。例如,因為您可以在同一個地方看到程式碼和標記,就比較容易學習單一檔案網頁。
- 因為只有一個檔案,所以使用單一檔案模型撰寫的網頁比較容易部署,或傳送至其他程式設計人員。
- 因為檔案之間沒有相依性,所以單一檔案網頁較容易重新命名。
- 因為網頁獨立於單一檔案中,所以管理原始程式碼控制系統中的檔案會比較容易。
程式碼後置網頁的優點
程式碼後置網頁提供的優勢,可以適用於使用大量程式碼的 Web 應用程式,或是多個開發人員在建立網站的情況。
程式碼後置模型的優點如下列所示:
- 程式碼後置網頁可以清楚分隔標記 (使用者介面) 和程式碼。如果在程式設計人員撰寫程式碼的同時,可以讓設計人員處理標記就很實用。
- 程式碼不會公開給網頁設計人員或是只使用網頁標記的其他人員。
- 多個網頁可以重複使用程式碼。
沒有留言:
張貼留言