AjaxPro.NET 是早期 ASP.NET AJAX 框架,通過自動生成 JavaScript 代理類,實現客戶端「像調用本地函數一樣」調用服務端方法。本文涵蓋配置、注冊、基礎調用、對象傳遞、異步模式、錯誤處理、現代替代方案對比。
protected void Page_Load(object sender, EventArgs e)
{
// 關鍵:注冊當前頁面類型,生成 JavaScript 代理
AjaxPro.Utility.RegisterTypeForAjax(typeof(TestPage));
// 若在命名空間:typeof(Namespace.TestPage)
}
[AjaxPro.AjaxMethod]
public string GetServerTime()
{
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
[AjaxPro.AjaxMethod]
public string GetString()
{
return "Hello AjaxPro";
}
public class Student
{
private string _name = "張三";
public int Age = 25;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
[AjaxPro.AjaxMethod]
public Student GetStudent()
{
return new Student();
}
[AjaxPro.AjaxMethod]
public void SetStudent(Student stu)
{
// 接收客戶端修改後的對象
string name = stu.Name; // 客戶端可能已改為 "李四"
// 業務邏輯...
}
| 問題 | 原因 | 解決 |
|---|---|---|
| JavaScript 报错 "TestPage is undefined" | 未調用 RegisterTypeForAjax、或類名不匹配 | 檢查 Page_Load 注冊、命名空間一致 |
| 服務端方法不執行 | 缺少 [AjaxMethod] 屬性、方法非 public | 添加屬性、確保 public |
| 對象屬性丟失 | 字段非 public、無屬性包裝、未標記 Serializable | 用 public 屬性、必要時 [Serializable] |
| 中文亂碼 | 頁面編碼與 AjaxPro 生成 JS 編碼不一致 | 頁面 @Page ContentType="text/html; charset=utf-8" |
| 調試服務端代碼 | JS 調用無法直接斷點 | VS 調試器附加 w3wp.exe、或用 Fiddler 查看 AJAX 請求/響應 |
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| AjaxPro.NET | 零配置生成代理、對象自動序列化、Web Forms 原生 | 停止維護、無 .NET Core 支持、ViewState 依賴 | 維護舊 Web Forms 專案 |
| ASP.NET AJAX (ScriptManager) | 內置、支持 UpdatePanel、頁面方法 | 重、ViewState 綁定、生成代碼冗長 | Web Forms 新功能 |
| jQuery $.ajax + WebMethod | 輕量、標準 REST、獨立於服務端框架 | 手寫 JSON 序列化、無強類型代理 | 現代 Web Forms / MVC |
| ASP.NET Web API | RESTful、內容協商、OData、跨平台 | 需獨立控制器、路由配置 | 新項目標準選擇 |
| SignalR | 實時雙向、自動重連、多傳輸降級 | 基礎設施複雜 | 實時推送場景 |
AjaxPro.NET 以「自動生成 JavaScript 代理」極大簡化了早期 AJAX 開發,核心流程:**引用 DLL → Web.config 註冊 Handler → Page_Load RegisterTypeForAjax → [AjaxMethod] 標記方法 → 客戶端 `頁面類名.方法名()` 調用**。對象傳遞自動處理序列化,支持同步/異步兩種模式。新項目請直接使用 **Web API + jQuery/Fetch** 或 **Blazor WebAssembly**,獲得現代化架構與生態支持。