1.添加web服务
在web项目中‘添加新项’->‘添加web服务’(注意文件后缀名是.asmx,不是.ashx的一般处理文件),添加完成后就会在你刚才所选的路径下出现后缀名为.asmx的web服务文件,而对应的类文件会被自动的放到App_code文件下,便于在整个项目中调用,类文件包括一个类及其helloworld的示例web服务方法,在类和方法上部以及自动加好了实现web服务的一些特性,其中类的前面有这样一个特性[System.Web.Script.Services.ScriptService],默认是被注释掉了,要取消注释(便于使用 ASP.NET AJAX 从脚本中调用此 Web 服务),然后就可以在类里面添加你需要的web服务方法,注意在方法前要加上[WebMethod]的特性。
2.客户端设置
在客户端页面上要加名称为ScriptManager的ajax控件(通常内嵌于body标签里面),可直接从工具栏的ajax extensions选项卡下拖拽,在内嵌脚本中引用刚才建的web服务,如下所示
3.js中调用web服务
关于js代码的位置要注意,不能放在header标签里面(不能识别web服务的方法),其他位置均可,具体调用采用的形式为:类名.方法名(参数1,参数2,回调函数)
在回调函数中处理web服务的返回结果,web服务方法返回结果在js都能智能识别,比如说一个泛型列表在js中就变成了集合,泛型中的元素如果是类,则类的属性可直接引用,有关其他返回类型在js中的识别,可在客户端调试模式下(可直接加断点或在js中加debugger语句,浏览器也要进行相应设置),添加‘监视’,在监视窗口中可以查看被监视变量的详细属性和方法。
4.页面回发时如何保留客户端控件回发前的状态
由于客户端控件无法像服务器控件呢样保存其视图状态,这一点对select控件尤其如此,我采用的解决办法是:既然服务器控件可以保留视图状态,呢就用隐藏的服务器控件保留当前select控件的选择值,在页面回发后页面加载事件(客户端)中,将select控件的等于隐藏控件中保存的值的选项置为选中,这样就实现了客户端控件视图状态的保留。