AJAX.NET用户开发指南(4)

80酷酷网    80kuku.com

  ajax|开发指南

private void Page_Load(object sender, EventArgs e){
Utility.RegisterTypeForAjax(typeof(User));
}

  在客户端我们可以通过这样的方式调用GetUser函数:

<script language="javascript">
function getUser(userId){
User.GetUser(GetUser_callback);
}

function GetUser_callback(response){
if (response != null && response.value != null){
var user = response.value;
if (typeof(user) == "object"){
alert(user.FirstName + " " + user.LastName);
}
}
}
getUser(1);
</script>

  返回值同服务器端对象一样有三个属性(FirstName, LastName and UserId)

  译者注:其他的类型只能由开发者通过在服务器端函数在返回值时自定义转换为ajax支持的类型来实现了,ajax推荐使用ToString方法

  其他工作方式

  在其他类注册函数

  在上面的例子及描述中,我们都是通过在页面的codebehind文件里完成函数的注册,但并不是说只能在页面的codebehide文件里完成注册,我们也可以在其他类中注册函数回忆一下,Ajax封装类是通过在特定类里面查找那些有Ajax.AjaxMethod()属性的方法来完成工作的,这些类在客户端又通过两个script片断来完成返回值描述使用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

  不过我们需要首先在调用页面注册这个代理类,类的名字不再是页面类,而是我们使用的这个类:

'Vb.Net

Private Sub Page_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Ajax.Utility.RegisterTypeForAjax(GetType(AjaxFunctions))
'...
End Sub

//C#

private void Page_Load(object sender, EventArgs e){
Ajax.Utility.RegisterTypeForAjax(typeof(AjaxFunctions));
//...
}

  记住,客户端调用使用这种格式的名字<ClassName>.<ServerSideFunctionName>因此,如果上面的Serversideadd函数位于AjaxFunctions类,而不是页面类的话,客户端调用则变为:AjaxFunctions.ServerSideAdd(1,2)

  代理是怎样工作的呢?

  第二个script标签,如下面的示例

<script type="text/javascript" src="/cqyd/ajax/cqyd.SchemeSendWatch,cqyd.ashx"></script>

  是由Ajax utility通过命名空间、类以及页面程序集自动生成的(当然也可以人工加入),从这一点我们可以想到Ajax.PageHandlerFactory是通过反射来取得有定制属性的函数的细节很显然,Handler寻找带有AjaxMethod定制属性的函数,取得他们的特征(返回类型、名称、参数)并依据这些信息创建客户端代理特别的,ajax创建一个与类型相同的JavaScript对象作为代理

  返回Unicode字符

  Ajax.net可以从服务器端向客户端返回Unicode字符,为了做到这一点,在服务端函数返回时返回的值必须是Html编码的:


分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: