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

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编码的:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值