<!-- intro1.aspx -->
<form action="intro1.aspx" method="post">
<h3>姓名:<input id="Name" type="text"></h3>
<select id="Category">
<option>心理學</option>
<option>商業</option>
</select>
<input type="submit" value="查詢">
</form>
結果:點擊查詢,表單資料遺失,因無伺服器端程式碼處理回傳。
<!-- intro2.aspx -->
<form action="intro2.aspx" method="post">
<h3>姓名:<input id="Name" type="text"></h3>
<select id="Category">...</select>
<input type="submit" value="查詢">
</form>
<p>
<%
for (int i = 0; i <= 7; i++)
{
%>
<font size="<%=i%>">Welcome to ASP.NET</font><br>
<%
}
%>
結果:每次回傳顯示字漸大文字,但表單輸入仍會遺失(無 ViewState)。
<!-- intro3.aspx -->
<form runat="server">
<h3>姓名:<asp:TextBox ID="Name" runat="server" /></h3>
<asp:DropDownList ID="Category" runat="server">
<asp:ListItem>心理學</asp:ListItem>
<asp:ListItem>商業</asp:ListItem>
</asp:DropDownList>
<asp:Button Text="查詢" runat="server" />
</form>
結果:自動保留使用者輸入(ViewState),無需撰寫任何程式碼。
| 階段 | 事件/方法 | 主要工作 |
|---|---|---|
| 初始化 | Init, InitComplete | 建立控制項樹、還原 ViewState、設定主題 |
| 載入 | Load, LoadComplete | 載入 ViewState/ControlState、處理回傳資料、觸發回傳事件 |
| 預渲染 | PreRender, PreRenderComplete | 資料繫結、最終調整控制項狀態、儲存 ViewState |
| 渲染 | Render, RenderControl | 輸出 HTML 至 Response |
| 釋放 | Unload | 清理資源、關閉連線 |
aspnet_compiler 預編譯,部署無原始碼、啟動更快。.aspx 對應 aspnet_isapi.dll (IIS 6) 或模組 (IIS 7+)。web.config 覆寫機制,子目錄可繼承/覆寫設定。| 特性 | ASP (舊) | ASP.NET |
|---|---|---|
| 程式碼模型 | 內嵌腳本、解譯執行 | 編譯類別、事件驅動 |
| 狀態管理 | 手動 Session/Cookie | ViewState、ControlState 自動 |
| 元件重用 | Include 檔案、COM 元件 | 使用者控制項、自訂控制項、組件 |
| 錯誤處理 | On Error Resume Next | 結構化 try/catch、全域/頁面錯誤事件 |
| 效能 | 每次解譯 | 動態編譯、快取、預編譯 |
ASP.NET 頁面框架以動態編譯、事件驅動、控制項封裝、ViewState 自動狀態管理四大支柱,徹底改變 Web 開發模式。理解從靜態 HTML 逐步加入程式碼區塊、伺服器控制項的演進過程,有助於掌握框架核心運作原理,寫出高效能、好維護的動態網頁應用。