asp.net 2.0 ajax中能够在客户端js中很方便地调用服务器webservice,以下为一些调用的示例。笔者安装的asp.net 2.0 ajax
版本为ajax november ctp。
三个示例分别为:
1 带参数的ws方法
2 不带参数的ws方法
3 参数类型为datatable的ws方法
一、webmethod
注意要点:
1 webmethod类需要添加命名空间 microsoft.web.script.services,此空间需要引用microsoft.web.preview.dll
2 类声明加入标签 [scriptservice]
3 在asp.net 2.0里可以直接用datatable作为返回类型了,但是需要在web.config文件添加序列化转换器的属性。dataset、datatable、datarow均有转换器
  <system.web.extensions>
    <scripting>
      <webservices>
        <jsonserialization>
          <converters>
            <add name="datasetconverter" type="microsoft.web.preview.script.serialization.converters.datasetconverter, microsoft.web.preview"/>
            <add name="datarowconverter" type="microsoft.web.preview.script.serialization.converters.datarowconverter, microsoft.web.preview"/>
            <add name="datatableconverter" type="microsoft.web.preview.script.serialization.converters.datatableconverter, microsoft.web.preview"/>
          </converters>
        </jsonserialization>
      </webservices>
    </scripting>
  </system.web.extensions>
web服务1:ws1
using system;
using system.web;
using system.collections;
using system.web.services;
using system.web.services.protocols;
using microsoft.web.script.services;
using system.data;
/**//// <summary>
/// ws1 的摘要说明
/// </summary>
[webservice(namespace = "http://tempuri.org/")]
[webservicebinding(conformsto = wsiprofiles.basicprofile1_1)]
[scriptservice]
public class ws1 : system.web.services.webservice {
public ws1 () {
        //如果使用设计的组件,请取消注释以下行 
        //initializecomponent(); 
    }
    [webmethod]
    public string servertime()
    {
        return string.format("now: {0}", datetime.now);
    }
    [webmethod]
    public datatable getdatatable()
    {
        datatable dt = new datatable("person");
        dt.columns.add(new datacolumn("name", typeof(string)));
        dt.columns.add(new datacolumn("lastname", typeof(string)));
        dt.columns.add(new datacolumn("email", typeof(string)));
        dt.rows.add("kui", "he", "[email protected]");
        dt.rows.add("ren", "chao", "[email protected]");
        return dt;
    }
}
web服务2:ws
using system;
using system.web;
using system.collections;
using system.web.services;
using system.web.services.protocols;
using microsoft.web.script.services;
/**//// <summary>
/// ws 的摘要说明
/// </summary>
[webservice(namespace = "http://tempuri.org/")]
[webservicebinding(conformsto = wsiprofiles.basicprofile1_1)]
[scriptservice]
public class ws : system.web.services.webservice {
public ws () {
        //如果使用设计的组件,请取消注释以下行 
        //initializecomponent(); 
    }
    [webmethod]
    [scriptmethod(usehttpget = true)]
    public string helloworld(string query)
    {
        string inputstring = server.htmlencode(query);
        if (!string.isnullorempty(inputstring))
        {
            return string.format("hello, {0}. ", inputstring);
        }
        else
        {
            return "query string is null or empty";
        }
    }
}
二、前台页面:
注意要点:
需要使用的后台webservice的方法均设置在如下位置
        <asp:scriptmanager id="scriptmanager1" runat="server">
            <services>
                <asp:servicereference path="~/ws.asmx" />
                <asp:servicereference path="~/ws1.asmx" />
            </services>
        </asp:scriptmanager>
default页面:
<%@ page language="c#" autoeventwireup="true" codefile="default.aspx.cs" inherits="_default" %>
<!doctype html public "-//w3c//dtd xhtml 1.1//en" "http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>untitled page</title>
    <script language="javascript" type="text/javascript" src="js.js">
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:scriptmanager id="scriptmanager1" runat="server">
            <services>
                <asp:servicereference path="~/ws.asmx" />
                <asp:servicereference path="~/ws1.asmx" />
            </services>
        </asp:scriptmanager>
        <div>
            <asp:button id="button1" runat="server" text="button" onclientclick="dd();return false;" />
            <div id="time">
            </div>
            <div id="list1">
                <asp:dropdownlist id="ddl1" runat="server" width="187px">
                </asp:dropdownlist>
                </div>
            
        </div>
    </form>
</body>
</html>
三、javascript程序:
注意要点:
ajax november ctp 需要用 eval() 方法将其转换成一个datatable对象(并且要裁掉最前面的"("),而ajax december ctp 支持以下方法转换“sys.preview.data.datatable.parsefromjson(result)”
    function dd()
    {
        ws.helloworld(   
                         'hekui', 
                         function(result) 
                         { 
                            alert(result); 
                         } 
                     );
        ws1.servertime(  
                         function(result) 
                         { 
                            alert(result); 
                            var divtime = document.getelementbyid("time");
                            divtime.innerhtml = result;
                         } 
                     );
       ws1.getdatatable(
                         function(result) 
                         {
                            // 获取到下拉框控件
                            var list = document.getelementbyid("ddl1"); 
                                                       
                            //ajax november ctp 需要用 eval() 方法将其转换成一个datatable对象(并且要裁掉最前面的"(")
                            var text= result.dataarray.substring(0,result.dataarray.length -1);            
                            var table = eval( text);
                            
                            //ajax december ctp 支持以下方法转换
//                            var table = sys.preview.data.datatable.parsefromjson(result);
                            
                            //清除下拉框原有列表项
                            for (x=list.options.length-1; x > -1; x--) 
                            {
                                list.remove(0);
                            }
                            
                            //从获取的datatable添加数据到下拉框列表项
                            for (x=0; x < table.length; x++ )
                            {
                                //获取每一行
                                var row = table[x];          
                                //创建一个列表项                  
                                var option = document.createelement("option"); 
                                //列表项显示文本赋值
                                option.text = row.name + " " + row.lastname;   
                                //列表项选项值赋值
                                option.value = row.email;                      
                                //判断浏览器类型,进行项目添加     
                                if ( window.navigator.appname.tolowercase().indexof("microsoft") > -1) 
                                   list.add(option);  
                                else
                                   list.add(option, null);          
                            }
                         }
                       );
    }
新闻热点
疑难解答
图片精选