自訂轉換器
我們已經看到,Ajax .NET封裝器能夠處理很多不同的.NET類型。但是除了大量.NET類和內建類型以外,封裝器對不能正確返回的其他類型僅僅調用ToString()。為了避免這種情況,Ajax .NET封裝器允許開發人員建立對象轉換器,用於在伺服器和客戶機之間平滑傳遞複雜物件。
其他事項
在其他類中註冊函數
上面的例子中,我們的伺服器端函數都放在執行頁面背後的代碼中。但是,沒有理由不能把這些函數放在單獨的類檔案中。要記住,封裝器的工作方式是在指定類中發現所有帶Ajax.AjaxMethod的方法。需要的類通過第二個指令碼標籤指定。使用Ajax.Utility.RegisterTypeForAjax,我們可以指定需要的任何類。比如,將我們的伺服器端函數作為單獨的類是合情合理的:
Public Class AjaxFunctions
<Ajax.AjaxMethod()> _
Public Function Validate(username As String, password As String) As Boolean
'do something
'Return something
End Function
End Class
通過指定類的類型而不是頁面就可以讓Ajax封裝器建立代理:
private void Page_Load(object sender, EventArgs e){
Ajax.Utility.RegisterTypeForAjax(typeof(AjaxFunctions));
//...
}
要記住,用戶端代理的名稱是<ClassName>.<ServerSideFunctionName>。因此,如果ServerSideAdd函數放在上面虛構的AjaxFunctions類中,用戶端調用就應該是: AjaxFunctions.ServerSideAdd(1,2)。
代理到底是如何工作的
Ajax工具產生的第二個指令碼標籤(也可以手工插入)傳遞了頁面的名稱空間、類名和程式集。根據這些資訊,Ajax.PageHandlerFactory就能夠使用反射得到具有特定屬性的任何函數的詳細資料。顯然,處理函數尋找具有AjaxMethod屬性的函數並得到它們的簽名(傳回型別、名稱和參數),從能夠建立必要的用戶端代理。具體而言,封裝器建立一個和類同名的JavaScript對象,該對象提供代理。換句話說,給定一個帶有Ajax ServerSideAdd方法的伺服器端類AjaxFunctions,我們就會得到公開ServerSideAdd函數的AjaxFunction JavaScript對象。如果將瀏覽器指向第二個指令碼標籤的路徑就會看到這種動作。
返回Unicode字元
Ajax .NET封裝器能夠從伺服器向客戶機返回Unicode字元。為此,資料在返回之前必須在伺服器上用html編碼。比如:
[Ajax.AjaxMethod]
public string Test1(string name, string email, string comment){
string html = "";
html += "Hello " + name + "<br>";
html += "Thank you for your comment <b>";
html += System.Web.HttpUtility.HtmlEncode(comment);
html += "</b>.";
return html;
}
http://www.shpan.com/Detail.asp?ID=399