随笔-313  评论-12138  文章-1  trackbacks-256

使用ASP.NET AJAX异步调用Web Service和页面中的类方法(8):服务器端和客户端数据类型的自动转换:数组类型

本文来自《ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关》的第三章《异步调用Web Service和页面中的类方法》,请同时参考本章的其他文章

 

3.7.5 数组类型

ASP.NET AJAX异步通讯层能够为数组类型自动生成相应的客户端JavaScript数组,如果数组中的项目为简单类型,那么无需任何额外操作。考虑如下的返回int[]的Web Service方法:

[WebMethod]
public int[] GetIntArray()
{
    return new int[] { 1, 2, 3, 4, 5, 6 };
}

通过ASP.NET AJAX异步通讯层调用该Web Service方法之后,返回值在Visual Studio调试器中显示出的结构如图3-27所示。

图3-27服务器端int[]类型在客户端的结构

传递简单类型的数组也非常直观,考虑如下接受一个int[]参数的Web Service方法:

[WebMethod]
public void SendIntArray(int[] intArray)
{
    // ......
}

我们可以在客户端构造一个整数数组,然后通过ASP.NET AJAX异步通讯层传递给该方法:

var intArray = [1, 2, 3, 4, 5];
PeopleManagementService.SendIntArray(intArray);

图3-28显示了传入的整数数组在Visual Studio调试器中显示出的结构。

图3-28 客户端的整数JavaScript数组可被自动转换为服务器端int[]类型

如果数组中包含的项目为复杂类型,那么我们仍旧需要为Web Service类添加[GenerateScriptType(typeof([TypeName]))]属性,其中[TypeName]表示该复杂类型的名称。依旧是以前面的Employee类为例,考虑下面这个返回一个Employee[]类型的Web Service方法,注意其中调用了前面小节中给出的GetGenericEmployeeList()方法:

[WebMethod]
public Employee[] GetEmployeeArray()
{
    return GetGenericEmployeeList().ToArray();
}

从客户端调用该Web Service方法之后,返回值在Visual Studio调试器中显示出的结构如图3-29所示。

图3-29服务器端Employee[]类型在客户端的结构

为Web Service类添加[GenerateScriptType(typeof(Employee))]属性之后,向服务器端传递Employee[]类型的数组也不难理解。考虑如下接受Employee[]类型的Web Service方法:

[WebMethod]
public void SendEmployeeArray(Employee[] employeeArray)
{
    // ......
}

然后用如下JavaScript代码构造一个包含客户端Employee对象的数组,并传递给该SendEmployeeArray()方法:

var employeeArray = new Array();
for (var i = 0; i < 10; ++i) {
    var em = new Employee();
    em.Id = i;
    em.Name = "name " + i;
    em.Email = "name" + i + "@some.com";
    em.Salary = 1000;
    
    employeeArray.push(em);
}
PeopleManagementService.SendEmployeeArray(employeeArray);

ASP.NET AJAX异步通讯层将自动把这个JavaScript数组转换为服务器端的Employee[]类型。图3-30显示了传入参数在Visual Studio调试器中显示出的结构。

图3-30客户端的Employee数组可被自动转换为服务器端Employee[]类型

如果需要的话,我们还可以将数组类型改为更为泛化的ArrayList。例如对于如下返回的ArrayList的Web Service方法来说,由于其中实际包含的仍是Employee项目,所以客户端将仍会接收到与图3-29中所示相同的Employee数组。

[WebMethod]
public ArrayList GetEmployeeList()
{
    ArrayList employeeList = new ArrayList();
    for (int i = 0; i < 10; ++i)
    {
        Employee em = new Employee(
            i,
            string.Format("name {0}", i),
            string.Format("name{0}@some.com", i),
            5000
        );
        employeeList.Add(em);
    }
 
    return employeeList;
}
posted on 2007-06-14 00:00 Dflying Chen 阅读(4796) 评论(21) 编辑 收藏

评论:
#1楼[楼主] 2007-06-14 00:08 | Dflying Chen      
posted on 2007-06-14 00:00
抢整,自己赞一个!

 回复 引用 查看   
#2楼 2007-06-14 01:21 | 若寒      
我是第二个。哈。
 回复 引用 查看   
#3楼 2007-06-14 02:09 | Leepy      
第三个。。
 回复 引用 查看   
#4楼 2007-06-14 07:57 | yao[未注册用户]
不错,这个系列连着看下来,确实收获不少, 不知道有没有运用asp.net ajax综合性的demo示例或讲解.那样会更加具有实战性.哈哈.看样我比较贪
 回复 引用   
#5楼 2007-06-14 09:58 | 里奥特      
这样看起来,是不是可以省掉AjaxPro了?楼主给说说看.有什么区别.或者说效率方面有什么优势?
 回复 引用 查看   
#6楼[楼主] 2007-06-14 10:12 | Dflying Chen      
@若寒
@Leepy
厉害……

 回复 引用 查看   
#7楼[楼主] 2007-06-14 10:13 | Dflying Chen      
@yao
恩,下周三我有个WebCast,其中讲了一下综合的示例:)

 回复 引用 查看   
#8楼[楼主] 2007-06-14 10:13 | Dflying Chen      
@里奥特
不是很熟悉AjaxPro,总归各有各的好处吧,以前曾经粗浅比较过一次,就发在这里个Blog中了

 回复 引用 查看   
#9楼 2007-06-14 11:11 | 夜风      
发一个上午看完一边,收获不小!什么时候用在来看看!
 回复 引用 查看   
#10楼[楼主] 2007-06-14 11:20 | Dflying Chen      
@夜风
每天都会有更新:)

 回复 引用 查看   
#11楼 2007-06-14 11:57 | Jane[未注册用户]
第N个~~
 回复 引用   
#12楼 2007-06-14 12:55 | Anthan      
今天下雨没赶上沙发啊。
不过还不算晚,每天看,每天都有新收获
期待你的WebCast

 回复 引用 查看   
#13楼[楼主] 2007-06-14 15:10 | Dflying Chen      
@Anthan
:)谢谢支持

 回复 引用 查看   
#14楼 2007-06-14 15:39 | 工控展览网[未注册用户]
这么多好文章,谢谢
 回复 引用   
#15楼 2007-06-21 17:09 | MK2      
连续看了7,8....
在客户端, 数组和泛型集合都是一样的.......

 回复 引用 查看   
#16楼[楼主] 2007-06-22 10:37 | Dflying Chen      
@MK2
是啊,服务器端有所不同而已

 回复 引用 查看   
#17楼[楼主] 2007-06-22 10:38 | Dflying Chen      
@工控展览网
:)

 回复 引用 查看   
#18楼 2007-08-10 08:15 | kevin[未注册用户]
请问陈老师:
因为ArrayList可以表示动态数组,客户端能否发回一个ArrayList,客户端javascript该如何编写呢?谢谢先

 回复 引用   
#19楼[楼主] 2007-08-23 19:04 | Dflying Chen      
@kevin
客户端只要传递一个数组,服务器端即可被自动转化为ArrayList。

 回复 引用 查看   
#20楼 2009-01-05 12:10 | jack要[未注册用户]
WebService能够传送ArrayList数据吗????客户端如何接受啊?
我是新手,请教一下。。

 回复 引用   
#21楼 2009-01-05 12:14 | jack要[未注册用户]
请问当查看运行WEBService时,XML会怎样显示出WEBSerice信息???
 回复 引用   
除非特别声明,本站内所有资源,包括但不限于文章,代码,图片等,均应用于Dflying版权说明
关于ASP.NET AJAX,您可以:
直接阅读ASP.NET AJAX文章分类
Atlas文章打包下载(截至4/28/2006)
加入ASP.NET AJAX学习团队
询问关于ASP.NET AJAX的问题
加入ASP.NET AJAX讨论群
阅读愚作《ASP.NET AJAX程序设计》
点击阅读
点击阅读


关于Windows Vista,您可以:
加入Windows Vista开发团队!
昵称:Dflying Chen
园龄:5年10个月
粉丝:127
关注:0

搜索

 
 

最新随笔

随笔分类(352)

随笔档案(313)

Blog Roll

Dflying的其他Blog

Online Chat

统计信息

积分与排名

  • 积分 - 2442908
  • 排名 - 7

最新评论

阅读排行榜

评论排行榜