| 維度 | ASP.NET 服務端控件 | HTML 控件 |
|---|---|---|
| 運行位置 | 服務端解析執行 | 客戶端瀏覽器直接渲染 |
| 最終產物 | 渲染為 HTML 元素輸出到瀏覽器 | 本身就是 HTML 元素 |
| 依賴環境 | 需 .NET Framework 運行的服務器 | 任何 Web 服務器(Java, PHP, Node 等)均可 |
| 狀態管理 | 自動維護 ViewState | 無自動狀態管理 |
type 屬性決定是否提交(如 type="button" 不提交,type="submit" 提交)。<asp:Button ID="btnDel" runat="server" Text="刪除"
OnClientClick="return jsDel();" OnClick="btnDel_Click" />
false 可阻止回發。| 寫法 | 行為 |
|---|---|
OnClientClick="return jsDel();" | jsDel 返回 true 時執行服務端;false 時阻止。 |
OnClientClick="jsDel(); return false;" | 無論 jsDel 結果,服務端永不執行(硬編碼阻止)。 |
OnClientClick="jsDel();" | 無返回值,默認不阻止,服務端總會執行(失去驗證作用)。 |
添加 runat="server" 後,HTML 控件轉為服務端控件(HtmlGenericControl 等),可在後端訪問屬性、綁定事件,但渲染仍為原生 HTML,無 ViewState、無服務端事件模型(需手動處理)。
ASP.NET 控件渲染後 ID 會被修改(如 ctl00_ContentMain_chkTrainConfirmType),客戶端 JS 獲取需用:
document.getElementById("<%= btn.ClientID %>")(僅限 .aspx 頁面內聯腳本)Button1.Attributes["onclick"] = "func('" + txt.ClientID + "');";ASP.NET 控件封裝了狀態管理、事件模型、適配渲染,開發效率高但有性能開銷;HTML 控件輕量、跨平台、前端可控。實際項目常混合使用:核心業務用服務端控件,高頻交互、前端組件用 HTML/JS。