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函數)同時帶有一個額外的定制屬性
。這個屬性是用來處理
服務器響應的回調函數: