| 維度 | 內聯程式碼 | 後置程式碼 |
|---|---|---|
| 檔案結構 | 單一 .aspx 含 <script runat="server"> | .aspx (標記) + .aspx.cs (C# 類別) |
| 類別定義 | 動態編譯產生單一類別 | partial class 分散於兩檔案 |
| 控制項變數 | 隱含宣告,無設計器檔案 | .aspx.designer.cs 自動產生 |
| 團隊協作 | 設計師與開發者易衝突 | 分離關注點,並行開發 |
| 編譯檢查 | 執行時才發現型別錯誤 | 建置時完整型別檢查 |
| 部署 | 單一檔案,XCOPY 部署 | 需編譯組件 (預編譯) 或原始碼部署 |
ASP.NET 1.x 需在 .aspx.cs 手動宣告每個控制項變數(protected TextBox TextBox1;),極易遺漏、不同步。ASP.NET 2.0 引入 partial class 機制:
.aspx.designer.cs,包含所有控制項欄位宣告。@ Page 指令指定 CodeFile="Default.aspx.cs" Inherits="_Default"。<%@ Page Language="C#" %>
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Hello " + TextBox1.Text;
}
</script>
<html><body>
<form runat="server">
<asp:TextBox ID="TextBox1" runat="server" />
<asp:Button ID="Button1" Text="Click" OnClick="Button1_Click" runat="server" />
<asp:Label ID="Label1" runat="server" />
</form>
</body></html>
Default.aspx
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<html><body>
<form runat="server">
<asp:TextBox ID="TextBox1" runat="server" />
<asp:Button ID="Button1" Text="Click" OnClick="Button1_Click" runat="server" />
<asp:Label ID="Label1" runat="server" />
</form>
</body></html>
Default.aspx.cs
public partial class _Default : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Hello " + TextBox1.Text; // 直接存取,無需宣告
}
}
Default.aspx.designer.cs (自動產生,勿手動修改)
public partial class _Default
{
protected global::System.Web.UI.WebControls.TextBox TextBox1;
protected global::System.Web.UI.WebControls.Button Button1;
protected global::System.Web.UI.WebControls.Label Label1;
}
Inherits 指定的類別名稱必須與 .aspx.cs 的 partial class 名稱完全一致。public、protected、internal,不可為 private(頁面框架需透過反射呼叫)。CodeFile 指向原始碼檔;預編譯部署時改用 CodeBehind 指向編譯組件中的類別。| 角色 | 職責 | 檔案 |
|---|---|---|
| UI 設計師 | 版面配置、CSS、控制項拖曳、屬性設定、資料繫結運算式 | .aspx, .css, .master |
| 前端工程師 | JavaScript、jQuery、AJAX 呼叫、客戶端驗證、動畫 | .js, .aspx (ScriptManager 區塊) |
| 後端開發者 | 事件處理、資料存取、業務規則、安全性、例外處理 | .aspx.cs, .cs (BLL/DAL), .config |
| 資料庫管理員 | Schema、預存程序、索引、權限、資料遷移 | .sql, .edmx |