首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 表單與控件基礎入門:HTML 表單提交、Get/Post 差異、亂碼與 SQL Injection 防範

     編輯:關於ASP.NET

HTML 表單核心屬性

  • action:提交目標 URL (如 `Process.aspx`)。
  • method:`get` (查詢字串) 或 `post` (請求主體)。

Get vs Post 差異實測

<!-- Register.aspx -->
<form action="GetUserInfo.aspx" method="get">
  <input name="username" />
  <input name="pwd" type="password" />
  <input type="submit" />
</form>
  • GET:瀏覽器網址列顯示 `GetUserInfo.aspx?username=abc&pwd=123`。長度受限 (~2KB)、資料曝光、可書籤/分享、適用**冪等查詢** (搜尋、分頁)。
  • POST:資料在 Request Body,網址不變。無長度限制、相對安全、不可書籤、適用**非冪等操作** (新增、修改、刪除、登入)。

伺服器端取得表單資料

// GET
string user = Request.QueryString["username"];

// POST
string user = Request.Form["username"];

// 兩者皆可 (QueryString 優先)
string user = Request["username"];

亂碼問題與解決

  • 頁面指令:`<%@ Page ContentType="text/html" ResponseEncoding="utf-8" %>`
  • ``
  • 資料庫連線字串加 `Charset=utf8` (MySQL) / 確認資料欄位 Collation。
  • 儲存 `.aspx` 檔案為 UTF-8 編碼 (Visual Studio 預設)。
  • 統一全站 UTF-8,避免 Big5/GB2312 混用。

SQL Injection 防範 - 參數化查詢

// 危險:字串串接
string sql = "SELECT * FROM Users WHERE UserName='" + txtUser.Text + "'";

// 安全:參數化
string sql = "SELECT * FROM Users WHERE UserName=@User";
using (var cmd = new SqlCommand(sql, conn))
{
    cmd.Parameters.AddWithValue("@User", txtUser.Text);
    // ...
}

參數化查詢將資料與程式碼分離,資料庫引擎將參數視為字面值而非可執行 SQL,徹底阻斷注入。

伺服器端表單 (`runat="server"`)

  • 表單標記加 `runat="server"`,ASP.NET 自動處理 PostBack、ViewState、事件模型。
  • 頁面只能有一個 `
    `。
  • 所有伺服器控件必須置於此表單內。

HTML 伺服器控件

原生 HTML 標籤加 `runat="server"` 並賦予 `id`,即成為伺服器控件。

<input type="text" id="txtName" runat="server" />
<select id="ddlCity" runat="server"></select>

後台可存取 `txtName.Value`、`ddlCity.Items` 等屬性。轉譯時保持原標籤結構。

總結

理解 HTML 表單 Get/Post 語意差異、正確取得伺服器端資料、統一 UTF-8 編碼、堅持參數化查詢防 SQL Injection,是 ASP.NET Web 開發的安全基石。伺服器端表單與 HTML 伺服器控件提供輕量級的伺服器端程式設計入口,進階開發則使用功能更豐富的 Web 伺服器控件 (`asp:` 開頭)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved