您的位置:首页 > 编程语言 > ASP

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

2007-06-14 00:00 761 查看
本文来自《ASP.NETAJAX程序设计第II卷:客户端MicrosoftAJAXLibrary相关》的第三章《异步调用WebService和页面中的类方法》,请同时参考本章的其他文章。

3.7.5数组类型ASP.NETAJAX异步通讯层能够为数组类型自动生成相应的客户端JavaScript数组,如果数组中的项目为简单类型,那么无需任何额外操作。考虑如下的返回int[]的WebService方法:
[WebMethod]
publicint[]GetIntArray()
{
returnnewint[]{1,2,3,4,5,6};
}

.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}

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



图3-27服务器端int[]类型在客户端的结构
传递简单类型的数组也非常直观,考虑如下接受一个int[]参数的WebService方法:
[WebMethod]
publicvoidSendIntArray(int[]intArray)
{
//......
}

我们可以在客户端构造一个整数数组,然后通过ASP.NETAJAX异步通讯层传递给该方法:
varintArray=[1,2,3,4,5];
PeopleManagementService.SendIntArray(intArray);

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



图3-28客户端的整数JavaScript数组可被自动转换为服务器端int[]类型
如果数组中包含的项目为复杂类型,那么我们仍旧需要为WebService类添加[GenerateScriptType(typeof([TypeName]))]属性,其中[TypeName]表示该复杂类型的名称。依旧是以前面的Employee类为例,考虑下面这个返回一个Employee[]类型的WebService方法,注意其中调用了前面小节中给出的GetGenericEmployeeList()方法:
[WebMethod]
publicEmployee[]GetEmployeeArray()
{
returnGetGenericEmployeeList().ToArray();
}

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



图3-29服务器端Employee[]类型在客户端的结构
为WebService类添加[GenerateScriptType(typeof(Employee))]属性之后,向服务器端传递Employee[]类型的数组也不难理解。考虑如下接受Employee[]类型的WebService方法:
[WebMethod]
publicvoidSendEmployeeArray(Employee[]employeeArray)
{
//......
}

然后用如下JavaScript代码构造一个包含客户端Employee对象的数组,并传递给该SendEmployeeArray()方法:
varemployeeArray=newArray();
for(vari=0;i<10;++i){
varem=newEmployee();
em.Id=i;
em.Name="name"+i;
em.Email="name"+i+"@some.com";
em.Salary=1000;
employeeArray.push(em);
}
PeopleManagementService.SendEmployeeArray(employeeArray);

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



图3-30客户端的Employee数组可被自动转换为服务器端Employee[]类型
如果需要的话,我们还可以将数组类型改为更为泛化的ArrayList。例如对于如下返回的ArrayList的WebService方法来说,由于其中实际包含的仍是Employee项目,所以客户端将仍会接收到与图3-29中所示相同的Employee数组。
[WebMethod]
publicArrayListGetEmployeeList()
{
ArrayListemployeeList=newArrayList();
for(inti=0;i<10;++i)
{
Employeeem=newEmployee(
i,
string.Format("name{0}",i),
string.Format("name{0}@some.com",i),
5000
);
employeeList.Add(em);
}
returnemployeeList;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐