<form runat="server"> 是 ASP.NET Web Forms 頁面的核心容器,**所有伺服器控制項必須置於其中**,提供伺服器端處理、ViewState 管理、PostBack 機制的基礎設施。本文詳細解析表單架構規則、自動屬性生成、提交行為與常見誤區。
<form runat="server">
<!-- 所有伺服器控制項必須在這裡 -->
<asp:TextBox ID="txtName" runat="server" />
<asp:Button ID="btnSubmit" Text="送出" runat="server" />
<asp:Label ID="lblResult" runat="server" />
</form>
this.txtName、FindControl)鐵律:一個 .aspx 頁面**只能包含一個**
<form runat="server">控制項。
"A page can have only one server-side Form tag."若 .aspx 中表單寫法極簡:
<form runat="server"></form>
瀏覽器檢視原始碼會看到 ASP.NET 自動補全:
<form name="ctl01" method="post" action="Default.aspx" id="ctl01"></form>
| 屬性 | 自動值 | 說明 |
|---|---|---|
| name | ctl01 (或 ctl00、form1 等) | 表單名稱,對應 Request.Form 鍵值 |
| id | ctl01 | 客戶端 ID,JavaScript 存取用 |
| method | post | HTTP 方法,固定 POST,不可覆寫 |
| action | 當前頁面 URL | 提交目固定為自身頁面,指定 action 會被忽略 |
| 特性 | HTML <form> | ASP.NET <form runat="server"> |
|---|---|---|
| 數量限制 | 頁面可多個 | 每頁僅一個 |
| action 屬性 | 可指定任意 URL | 固定為自身頁面(忽略指定值) |
| method 屬性 | GET/POST 可選 | 固定 POST |
| 伺服器控制項 | 不可包含 | 必須包含 |
| ViewState | 無 | 自動管理 |
| PostBack 機制 | 無 | 內建 |
| JavaScript 存取 | document.forms[0] | document.getElementById("ctl01") |
<form runat="server"> 內部Response.Redirect("Target.aspx?param=" + txt.Value) 或 HyperLink 控制項Panel 控制項 Visible 切換顯示不同區塊MultiView/View 管理多步驟精靈ValidationGroup 區分驗證範圍,單一表單支援多邏輯區塊AutoID (預設 ctl00_ContentPlaceHolder1_btnSubmit) vs Static (固定 ID)ClientIDMode="Static" 讓 ID 可預測document.querySelector('form[action*="Default.aspx"]') 選取<!-- MasterPage.master -->
<%@ Master %>
<html><body>
<form runat="server">
<header>...</header>
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
<footer>...</footer>
</form>
</body></html>
內容頁**不需也不應**再宣告 <form runat="server">,直接在 <asp:Content> 放置控制項即可。
<form runat="server">asp: 控制項、HtmlInput 控制項必須在表單內action、method 屬性(會被忽略)ValidationGroup 實現單表單多驗證邏輯PostBackUrl + PreviousPage掌握 Web Forms 表單架構規則,能避開常見結構性錯誤,建構符合框架設計哲學的穩健頁面。下一節將介紹事件處理機制:Page_Load、IsPostBack、事件委派與生命週期。