ASP.NET Web 網頁程式碼模型

更新:2007 年 11 月

ASP.NET Web 網頁是由兩部分組成:

  • 視覺項目,其中包含標記、伺服器控制項和靜態文字。

  • 網頁的程式設計邏輯,其中包含事件處理常式和其他程式碼。

ASP.NET 提供兩個模型以管理視覺項目和程式碼:單一檔案網頁模型和程式碼後置網頁模型。兩個模型的功能是相同的,並且您可以在兩個模型上使用相同的控制項和程式碼。

本主題說明每個模型運作的方式,並提供何時選擇哪一個模型的建議。

單一檔案網頁模型

在單一檔案網頁模型中,網頁的標記和程式碼都在相同的實體 .aspx 檔中。程式設計碼是在包含 屬性的 script 區塊中,以便讓其成為 ASP.NET 要執行的程式碼。

下列程式碼範例,示範了包含 ButtonLabel 控制項的單一檔案網頁。反白顯示的部分顯示 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 先行編譯概觀

請參閱

概念

ASP.NET 網頁存留週期概觀

ASP.NET 編譯概觀