ajax|開發指南
//C#
public class Index : System.Web.UI.Page{ private void Page_Load(object sender, EventArgs e){ Ajax.Utility.RegisterTypeForAjax(typeof(Index)); //... } //... } |
對RegisterTypeForAjax方法的調用在頁面產生如下的javascript代碼(另外一種選擇,你也可以人工在頁面上添加如下的javascript代碼)
<script language="javascript" src="ajax/common.ashx"></script> <script language="javascript" src="ajax/NAMESPACE.PAGECLASS,ASSEMBLYNAME.ashx"></script> |
上面這段代碼的粗體部分
NAMESPACE.PAGECLASS,
ASSEMBLYNAME含義如下:
NAMESPACE.PAGECLASS
|
當前頁面的命名空間和類
|
ASSEMBLYNAME
|
當前頁面的程式集的名稱
|
下面是在AjaxPlay項目中sample.aspx的樣本輸出:
<%@ Page Inherits="AjaxPlay.Sample" Codebehind="sample.aspx.cs" ... %> <html> <head> <script language="javascript" src="ajax/common.ashx"></script> <script language="javascript" src="ajax/AjaxPlay.Sample,AjaxPlay.ashx"></script>
</head> <body> <form id="Form1" method="post" runat="server"> ... </form> </body> </html> |
你可以測試一下,人工通過瀏覽器將src path(通過查看源檔案並copy)開啟,一切都能正常的工作。如果輸出了無意義的文本表示到目前為止是正確的,如果輸出asp.net錯誤,則表示中間出現了錯誤。
即使你不瞭解HttpHandle的工作方式,也應該可以理解上面的描述。通過web.config,我們可以確保發送向
ajax/*.ashx的請求由我們自訂的控制代碼來處理,很顯然,兩個指令碼標記由自訂控制代碼處理。
編寫服務端函數
現在我們編寫伺服器端函數,他們可以被用戶端非同步調用。儘管現在還不能支援全部的傳回型別,我們仍堅持伺服器端添加功能。在codebehind檔案的頁面類裡,添加下面的方法:
'VB.Net
<Ajax.AjaxMethod()> _
Public Function ServerSideAdd (byval firstNumber As Integer, byval secondNumber As Integer) As Integer Return firstNumber + secondNumber End Function |
//C#
[Ajax.AjaxMethod()]
public int ServerSideAdd(int firstNumber, int secondNumber) { return firstNumber + secondNumber; } |
注意,這個函數有Ajax.AjaxMethod()定製屬性,屬性服務會告知ajax封裝類為此方法建立一個javascript代理,這樣才能被用戶端調用。
定製用戶端調用
接下來在用戶端用javascript調用函數。Ajax封裝類會建立一個javascript函數,帶有兩個參數,名字是 類名.ServerSideAdd。作為最基本的功能,我們所需要作的只是調用這個方法並且傳遞參數:
<%@ Page Inherits="AjaxPlay.Sample" Codebehind="sample.aspx.cs" ... %> <html> <head> <script language="javascript" src="ajax/common.ashx"></script> <script language="javascript" src="ajax/AjaxPlay.Sample,AjaxPlay.ashx"></script>
</head>
<body> <form id="Form1" method="post" runat="server"> <script language="javascript"> var response = Sample.ServerSideAdd(100,99); alert(response.value); </script> </form> </body> </html> |
當然,我們不能把這麼強大的功能僅僅用來通過alert來提醒瀏覽者,這就是為什麼所有的用戶端代理(如 類名.ServerSideAdd函數)同時帶有一個額外的定製屬性。這個屬性是用來處理伺服器響應的回呼函數:
- Ajax: 一個建立Web應用的新途徑
- Ajax的錯誤處理機制探討(2)
- Ajax的錯誤處理機制探討(1)
- 初次體驗.NET Ajax無重新整理技術
- Rails系統中的AJAX開發技術簡析(4)