經典WebForms雙頁面傳值:第一頁構建帶參數URL跳轉,第二頁接收並解析參數。
// 假設按鈕點擊事件
protected void btnSubmit_Click(object sender, EventArgs e) {
string name = txtName.Text; // "張三"
int age = int.Parse(txtAge.Text); // 25
// 構建查詢字符串,& 符號分隔多個參數
string url = $"Page2.aspx?name={Server.UrlEncode(name)}&age={age}";
Response.Redirect(url);
}
生成URL示例:Page2.aspx?name=%E5%BC%B5%E4%B8%89&age=25
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
// QueryString集合自動解析URL參數
string name = Request.QueryString["name"]; // 自動URL解碼
string ageStr = Request.QueryString["age"];
if (!string.IsNullOrEmpty(name)) {
lblWelcome.Text = $"歡迎,{name}!年齡:{ageStr}";
}
}
}
| 上下文 | 含義 | 示例 |
|---|---|---|
| URL查詢字符串 | 參數分隔符 | ?a=1&b=2 |
| ASPX標記語法 | XML實體引用,渲染為 & | & → 頁面顯示 & |
| C#字符串 | 普通字符 | "a&b" |
Server.UrlEncode() 或 HttpUtility.UrlEncode() 將中文/特殊字符轉為%XX格式Request.QueryString 內部自動調用 UrlDecode() 還原原始值
var parameters = new Dictionary<string, string> {
{ "name", txtName.Text },
{ "age", txtAge.Text },
{ "city", ddlCity.SelectedValue }
};
var queryString = string.Join("&",
parameters.Select(kvp => $"{kvp.Key}={HttpUtility.UrlEncode(kvp.Value)}")
);
Response.Redirect($"TargetPage.aspx?{queryString}");
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| QueryString (GET) | 簡單、可收藏、可分享、瀏覽器歷史 | 長度限制(~2KB)、明文暴露、不適合敏感數據 | 非敏感導航、搜索、分頁 |
| Session/Application | 容量大、不顯示URL、支援複雜對象 | 服務端內存佔用、需管理過期、多標籤頁衝突 | 用戶狀態、購物車、權限數據 |
| Post/Redirect/Get | 無長度限制、相對安全 | 需兩請求、不可直接收藏 | 表單提交、修改操作 |
| 隱藏字段/ViewState | 頁面級持久化 | 增加頁面體積、僅Postback有效 | 頁面內部狀態保持 |
HttpUtility.HtmlEncode()QueryString是WebForms頁面傳值最基礎方式,&在URL中分隔參數,在ASPX中需轉義。掌握UrlEncode/QueryString編解碼機制,配合參數驗證與安全編碼,即可構建健壯的頁面跳轉傳值鏈路。