承接上篇文章,本文將詳細介紹 ASP.NET 環境下 C# 後端程式碼與前端 JavaScript 的四種互動模式,涵蓋函式呼叫、變數存取與實戰技巧。
Page.RegisterStartupScript("key", "");
private void Button2_Click(object sender, EventArgs e)
{
string script = "";
Literal1.Text = script;
Literal1.Visible = true;
}
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", "alert('Hello');", true);
// 前端 JavaScript
function SubmitKeyClick() {
if (event.keyCode == 13) { // Enter 鍵
event.cancelBubble = true;
event.returnValue = false;
document.all.FunName.value = "你要呼叫的函數名";
document.forms[0].submit();
}
}
// 後端 C#
public void Page_Load() {
if (!Page.IsPostBack) return;
string funName = Request.Form["FunName"] ?? "";
switch (funName) {
case "enter()": Enter(); break;
case "other": OtherFunction(); break;
default: DefaultFunction(); break;
}
}
// 後端
HiddenField1.Value = "ServerValue";
// 前端
var value = document.getElementById("HiddenField1").value;
// 後端定義 public string MyVar = "Test";
// 前端 JavaScript
var jsVar = '<%= MyVar %>'; // 字串值
var jsVar2 = "<%= MyVar %>"; // 同樣有效
// 後端
string script = "";
Page.RegisterStartupScript("initVar", script);
// 前端直接使用 temp 變數
// 前端
document.getElementById("HiddenField1").value = jsVariable;
// 後端
string value = Request.Form["HiddenField1"];
// 前端寫入 Cookie
document.cookie = "jsVar=" + escape(jsVariable);
// 後端讀取
string value = Request.Cookies["jsVar"]?.Value;
同上文方法一、二,關鍵在於腳本註冊時機:
RegisterStartupScript:頁面載入完成前執行 (適合初始化)RegisterClientScriptBlock:頁面開頭輸出 (適合函式定義)Literal 控制項:精確控制輸出位置| 場景 | 推薦方式 |
|---|---|
| 後端條件判斷決定是否執行 JS | RegisterStartupScript |
| 定義供前端呼叫的 JS 函式 | RegisterClientScriptBlock |
| 大量動態 JS 代碼 | Literal 控制項 |
| 前端事件觸發後端邏輯 | 隱藏欄位 + __doPostBack / AJAX |
| 雙向資料交換 | JSON + AJAX / WebMethod |
現代建議:新專案請優先使用 ASP.NET Core + JavaScript 模組化 (ES6+) + fetch/AJAX API 呼叫,避免傳統 WebForms 郵件回傳模式的複雜度。