ASP.NET AJAX 早期(Atlas CTP)支援實例 Page Method,可直接存取頁面控制項(this.TextBox1.Text)。Beta/RC 版移除此功能,強制改為靜態方法,導致大量遷移痛點。本文分析差異並提供轉換方案。
| 特性 | 實例 Page Method | 靜態 Page Method |
|---|---|---|
| 存取控制項 | 可透過 this 直接存取 | 無法存取,需由客戶端傳值 |
| 傳輸資料量 | 完整 ViewState + 所有表單欄位(相當於完整 PostBack) | 僅傳遞必要參數,極輕量 |
| 效能 | 差,頻寬大、伺服器需重建控制項樹 | 優,接近 Web Service 呼叫 |
| 修改控制項回傳 | 無法將伺服器端控制項變更輸出至客戶端 | 同樣無法,需客戶端 JS 更新 UI |
舊版(實例):
[WebMethod]
public string GetString(string split)
{
return this.TextBox1.Text + split + this.TextBox2.Text;
}
// 客戶端
PageMethods.GetString('|', successCallback);
新版(靜態):
[ScriptMethod]
public static string GetString(string split, string text1, string text2)
{
return text1 + split + text2;
}
// 客戶端
var text1 = $get('<%= TextBox1.ClientID %>').value;
var text2 = $get('<%= TextBox2.ClientID %>').value;
PageMethods.GetString('|', text1, text2, successCallback);
UpdatePanel 部分更新,犧牲效能換相容性。作者強調:幾乎所有案例皆可用「客戶端取值 → 參數傳遞」模式解決,效能提升顯著。