- 想要让asp.net ajax 异步通信曾为服务器复杂类型自动生成相应的客户端javascript类型,并在调用过程中传递并接收该负责类型,我们需要:
- 为web service类或web service 中需要暴露给客户端的方法添加[ScriptService]属性;
- 为web Service类中需要暴露给客户端的方法添加[WebMethod]属性;
- 为Web Service类添加若干个[GenerateScriptType(typeof([TypeName]))]属性,[TypeName]表示该复杂类型或其嵌套的复杂类型的名称;
- 该复杂类型必须要有一个无参数的构造函数;
- 该复杂类型的所有共有属性应该提供获取方法和设置方法(即需要可读可写),除了如下几种情况
- 该属性应用了[System.Web.Script.Serialization.ScriptIgnore]属性,即让ASP.NET AJAX异步通信层在省城客户端javaScript类型时忽略该属性,那么其属性可以没有设置方法或获取方法;
- 该服务器端队形只是用来单项输出JSON字符串,那么其属性可以没有设置方法;
- 在客户端传入的时候不会设置该属性的值,那么该属性可以没有设置方法。在页面的ScriptManager控件中添加对该WebService的引用。
然后,ASP.NET AJAX异步通信层在位服务器端复杂类型省城客户端javascript类型时将:
- 会把没有应用[System.Web.Script.Serialization.ScriptIgnore]的公有属性(property)或公有字段(field)映射到客户端javascript类型中;
- 不会把该复杂类型的私有字段映射到客户端javascript类型中;
- 不会把改负责类型的方法(method)映射到客户端javascript类型中;
- 我们也可以使用如下语法在客户端直接创建该复杂类型:
- var myObj = new [NameSpace].[ClassName]();