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

ASP.NET 前端 JavaScript 與後端 C# 互調用完整指南:四大場景、四種實作模式與最佳實踐

     編輯:關於ASP.NET

WebForms 開發常需前後端互動。本文系統整理四大核心場景與對應實作模式。

場景一:JavaScript 呼叫 C# 方法 (伺服器端邏輯)

模式原理優點缺點
隱藏按鈕 + __doPostBackJS 觸發隱藏 Button Click 事件完整生命週期、支援 ViewState/驗證完整 PostBack、頁面重整
內嵌程式碼塊 <%=Method()%>渲染階段執行 C# 回傳字串給 JS 變數簡單、無 PostBack僅限渲染期、無法互動
PageMethods / WebMethod (AJAX)[WebMethod] 靜態方法 + ScriptManager EnablePageMethods輕量 AJAX、JSON 序列化、無 ViewState需 ScriptManager、靜態方法無法存取控件
UpdatePanel 部分更新AJAX 觸發伺服器事件、局部刷新保留 WebForms 開發習慣ViewState 傳輸大、非標準 AJAX

推薦:PageMethods 範例

// 後端
[WebMethod]
public static string GetServerTime()
{
    return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}

// 前端

場景二:JavaScript 存取 C# 變數/屬性

// 後端
public string CurrentUser { get; set; } = "Admin";

// 前端 (內嵌程式碼塊,渲染時注入)
var user = '<%= CurrentUser %>';
var config = <%= JsonSerializer.Serialize(new { theme="dark", lang="zh" }) %>;
  • 僅單向:伺服器 → 用戶端 (渲染時刻快照)。
  • 字串值需 HttpUtility.JavaScriptStringEncode 防 XSS。
  • 複雜物件用 JsonSerializer.Serialize (System.Text.Json) 或 JavaScriptSerializer。

場景三:C# 存取 JavaScript 變數/函數

直接存取不可行 (伺服器端執行早於用戶端)。替代方案:

  1. 隱藏欄位:<input type="hidden" id="hfClientData" runat="server" />,JS 寫值,PostBack 時 C# 讀 hfClientData.Value。
  2. 2. __EVENTARGUMENT:__doPostBack('btn', jsonData),C# 端 Request["__EVENTARGUMENT"] 取得。 3. AJAX 回傳:PageMethods 回傳 JSON 物件,C# 邏輯在伺服器端完成,結果回傳給 JS。

場景四:C# 呼叫 JavaScript 函數 (伺服器端觸發用戶端行為)

時機方法範例
渲染階段Page.ClientScript.RegisterStartupScriptRegisterStartupScript(this.GetType(), "alert", "alert('Hello');", true);
部分更新 (UpdatePanel)ScriptManager.RegisterStartupScriptScriptManager.RegisterStartupScript(this, GetType(), "key", "initChart();", true);
非 AJAX 完整回傳Response.Write("")不推薦:破壞 HTML 結構、時機難控

安全與架構最佳實踐

  1. 輸入驗證:所有來自 JS 的資料 (QueryString/Form/JSON) 視為不受信,伺服器端必驗證。
  2. 2. 輸出編碼:注入 JS 字串/HTML/URL 必編碼 (JavaScriptStringEncode/HtmlEncode/UrlEncode)。 3. 最小權限:[WebMethod] 僅暴露必要業務邏輯,避免直接暴露 DAL/DB 操作。 4. 現代化替代:新專案建議 ASP.NET Core + WebAPI + fetch/axios 前端分離,徹底解耦前後端。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved