ASP.NET Web 網頁程式碼模型
更新:2007 年 11 月
ASP.NET Web 網頁是由兩部分組成:
視覺項目,其中包含標記、伺服器控制項和靜態文字。
網頁的程式設計邏輯,其中包含事件處理常式和其他程式碼。
ASP.NET 提供兩個模型以管理視覺項目和程式碼:單一檔案網頁模型和程式碼後置網頁模型。兩個模型的功能是相同的,並且您可以在兩個模型上使用相同的控制項和程式碼。
本主題說明每個模型運作的方式,並提供何時選擇哪一個模型的建議。
單一檔案網頁模型
在單一檔案網頁模型中,網頁的標記和程式碼都在相同的實體 .aspx 檔中。程式設計碼是在包含 屬性的 script 區塊中,以便讓其成為 ASP.NET 要執行的程式碼。
下列程式碼範例,示範了包含 Button 和 Label 控制項的單一檔案網頁。反白顯示的部分顯示 script 區塊中 Button 控制項的 Click 事件處理常式。
<%@ Page Language="VB" %>
<script >
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" >
<title>Single-File Page Model</title>
</head>
<body>
<form id="form1" >
<div>
<asp:Label ID="Label1"
Text="Label">
</asp:Label>
<asp:Button ID="Button1"
OnClick="Button1_Click" Text="Button">
</asp:Button>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<script >
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 >
<div>
<asp:Label id="Label1"
Text="Label">
</asp:Label>
<br />
<asp:Button id="Button1"
onclick="Button1_Click"
Text="Button">
</asp:Button>
</div>
</form>
</body>
</html>
script區塊可以包含網頁所需的任何程式碼數量。程式碼可以由網頁上控制項的事件處理常式 (如同在這個範例中)、方法、屬性,以及在類別檔中通常會使用的任何其他程式碼所組成。在執行階段時,單一檔案網頁會被視為衍生自 Page 類別的類別。這個網頁並未包含明確類別宣告,而是由編譯器產生包含控制項做為成員的新類別 (並非所有控制項都會公開做為網頁成員。某些控制項是其他控制項的子系)。網頁中的程式碼會變成類別的一部分。例如,您建立的事件處理常式會變成衍生 Page 類別的成員。
如需詳細資訊,請參閱 ASP.NET 網頁類別概觀。
程式碼後置網頁模型
程式碼後置網頁模型可以讓您將標記放在單一檔案 (.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) 並且類似單一檔案網頁,如同下列程式碼範例所示。
<%@ Page Language="VB" CodeFile="SamplePage.aspx.vb"
Inherits="SamplePage" AutoEventWire="false" %>
<html>
<head >
<title>Code-Behind Page Model</title>
</head>
<body>
<form id="form1" >
<div>
<asp:Label id="Label1"
Text="Label" >
</asp:Label>
<br />
<asp:Button id="Button1"
onclick="Button1_Click"
Text="Button" >
</asp:Button>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" CodeFile="SamplePage.aspx.cs"
Inherits="SamplePage" AutoEventWireup="true" %>
<html>
<head >
<title>Code-Behind Page Model</title>
</head>
<body>
<form id="form1" >
<div>
<asp:Label id="Label1"
Text="Label" >
</asp:Label>
<br />
<asp:Button id="Button1"
onclick="Button1_Click"
Text="Button" >
</asp:Button>
</div>
</form>
</body>
</html>
單一檔案和程式碼後置模型在 .aspx 網頁上有兩項差異。在程式碼後置模型中,並沒有使用 屬性的 script 區塊 (如果您想要在網頁中撰寫用戶端指令碼,網頁可能包含不使用 屬性的 script 區塊)。第二項差異是程式碼後置模型中的 @ Page 指示詞包含參考外部檔案 (SamplePage.aspx.vb 或 SamplePage.aspx.cs) 和類別的屬性。這些屬性會將 .aspx 網頁連結至程式碼。
程式碼是在不同的檔案中。下列程式碼範例示範的程式碼後置檔案,所包含的 Click 事件處理常式與單一檔案網頁範例相同。
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
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();
}
}
程式碼後置檔案在預設命名空間中包含完整的類別宣告。然而,類別是使用 partial 關鍵字宣告,表示類別並非完全包含在單一檔案中。而是在網頁執行時,編譯器會讀取 .aspx 網頁以及在 @ Page 指示詞中參考的檔案、將其組成單一類別,然後編譯為單一類別的單元。
partial 類別檔會繼承自網頁 Page 類別。如需詳細資訊,請參閱 ASP.NET 網頁類別概觀。
選擇網頁模型
單一檔案和程式碼後置網頁模型的功能相同。在執行階段,模型的執行方式相同,並且兩者之間並沒有效能上的差異。因此選擇網頁模型是依照其他因素而定,例如應用程式中程式碼的組織方式、分開網頁設計和程式碼是否很重要等因素。
注意事項: |
---|
在文件中讀取的範例通常會以單一檔案網頁表示。這主要是為了方便讀者,因為如此就不需要說明每個範例的兩種檔案。在文件中發現單一檔案範例的事實,並不能解釋為偏好單一檔案網頁而不是程式碼後置網頁,也不代表單一檔案網頁有某些其他先天優勢。 |
單一檔案網頁的優點
一般而言,如果網頁的程式碼主要是由網頁上控制項的事件處理常式所組成,則適合使用單一檔案模型。
單一檔案網頁模型的優點如下列所示:
在程式碼不多的網頁中,將程式碼和標記放在相同檔案中的便利性,將超越程式碼後置模型的其他優點。例如,因為您可以在同一個地方看到程式碼和標記,就比較容易學習單一檔案網頁。
因為只有一個檔案,所以使用單一檔案模型撰寫的網頁比較容易部署,或傳送至其他程式設計人員。
因為檔案之間沒有相依性,所以單一檔案網頁較容易重新命名。
因為網頁獨立於單一檔案中,所以管理原始程式碼控制系統中的檔案會比較容易。
程式碼後置網頁的優點
程式碼後置網頁提供的優勢,可以適用於使用大量程式碼的 Web 應用程式,或是多個開發人員在建立網站的情況。
程式碼後置模型的優點如下列所示:
程式碼後置網頁可以清楚分隔標記 (使用者介面) 和程式碼。如果在程式設計人員撰寫程式碼的同時,可以讓設計人員處理標記就很實用。
程式碼不會公開給網頁設計人員或是只使用網頁標記的其他人員。
多個網頁可以重複使用程式碼。
編譯和部署
單一檔案和程式碼後置網頁的編譯與部署方式類似。最簡單的方式是將網頁複製到目標伺服器。如果您使用程式碼後置網頁,就要同時複製 .aspx 網頁和程式碼檔案。當首次要求網頁時,ASP.NET 會編譯並執行網頁。請注意在兩種情況下您都要使用標記部署原始程式碼。
此外,您也可以先行編譯網站。在這種情況下,ASP.NET 會產生網頁的物件程式碼,讓您複製到目標伺服器。單一檔案和程式碼後置模型都能夠使用先行編譯,並且兩種模型的輸出都相同。如需詳細資訊,請參閱 ASP.NET 先行編譯概觀。