网站首页 > 网络编程教程 > ASP.NET教程 > ASP.NET 2.0 AJAX中Webservice调用方法示例

ASP.NET 2.0 AJAX中Webservice调用方法示例

  • 作者:互联网
  • 时间:2009-07-01 16:26:34

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类需要添加命名空间 Mi***soft.Web.Script.Services,此空间需要引用Mi***soft.Web.Preview.dll
2 类声明加入标签 [ScriptService]
3 在Asp.net 2.0里可以直接用DataTable作为返回类型了,但是需要在We***onfig文件添加序列化转换器的属性。DataSet、DataTable、DataRow均有转换器

  <sy***m.web.extensions>
   
     
       
         
            Mi***soft.Web.Preview.Script.Serialization.Converters.DataSetConverter, Mi***soft.Web.Preview"/>
            Mi***soft.Web.Preview.Script.Serialization.Converters.DataRowConverter, Mi***soft.Web.Preview"/>
            Mi***soft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Mi***soft.Web.Preview"/>
         

       

     

   

  sy***m.web.extensions>
WEB服务1:WS1

using System;
using Sy***m.Web;
using Sy***m.Collections;
using Sy***m.Web.Services;
using Sy***m.Web.Services.Protocols;
using Mi***soft.Web.Script.Services;
using Sy***m.Data;
/**////


/// WS1 的摘要说明
///

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = Ws***ofiles.BasicProfile1_1)]
[ScriptService]
public class WS1 : Sy***m.Web.Services.WebService {

    public WS1 () {

        //如果使用设计的组件,请取消注释以下行
        //InitializeComponent();
    }

    [WebMethod]
    public string ServerTime()
    {
        return St***g.Format("now: {0}", Da***ime.Now);
    }

    [WebMethod]
    public DataTable GetDataTable()
    {
        DataTable dt = new DataTable("Person");

        dt***lumns.Add(new DataColumn("Name", typeof(string)));
        dt***lumns.Add(new DataColumn("LastName", typeof(string)));
        dt***lumns.Add(new DataColumn("Email", typeof(string)));

        dt***ws.Add("kui", "he", "he***[email protected]">he***[email protected]");
        dt***ws.Add("ren", "chao", "ch***[email protected]">ch***[email protected]");

        return dt;
    }
}


WEB服务2:WS

using System;
using Sy***m.Web;
using Sy***m.Collections;
using Sy***m.Web.Services;
using Sy***m.Web.Services.Protocols;
using Mi***soft.Web.Script.Services;

/**////


/// WS 的摘要说明
///

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = Ws***ofiles.BasicProfile1_1)]
[ScriptService]
public class WS : Sy***m.Web.Services.WebService {

    public WS () {

        //如果使用设计的组件,请取消注释以下行
        //InitializeComponent();
    }

    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public string HelloWorld(String query)
    {
        string inputString = Se***r.HtmlEncode(query);
        if (!St***g.IsNullOrEmpty(inputString))
        {
            return St***g.Format("hello, {0}. ", inputString);
        }
        else
        {
            return "query string is null or empty";
        }
    }

}


二、前台页面:
注意要点:
需要使用的后台WebService的方法均设置在如下位置

       
           
               
                /W***asmx" />
           

       

Default页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="De***lt.aspx.cs" Inherits="_Default" %>

http://ww***.org/TR/xhtml11/DTD/xhtml11.dtd">http://ww***.org/TR/xhtml11/DTD/xhtml11.dtd">
http://ww***.org/1999/xhtml">http://ww***.org/1999/xhtml">

    Untitled Page

   



   


       
           
               
                /W***asmx" />
           

       

       

           
           

           

           

               
               

               

           
       

   


三、JavaScript程序:
注意要点:
AJAX November CTP 需要用 eval() 方法将其转换成一个DataTable对象(并且要裁掉最前面的"("),而AJAX December CTP 支持以下方法转换“Sy***review.Data.DataTable.parseFromJson(result)”

    function dd()
    {
        WS***lloWorld(  
                         'hekui',
                         function(result)
                         {
                            alert(result);
                         }
                     );
        WS***erverTime
                         function(result)
                         {
                            alert(result);
                            var divTime = do***ent.getElementById("time");
                            di***me.innerHTML = result;
                         }
                     );
       WS***etDataTable(
                         function(result)
                         {
                            // 获取到下拉框控件
                            var List = do***ent.getElementById("ddl1");
                                                      
                            //AJAX November CTP 需要用 eval() 方法将其转换成一个DataTable对象(并且要裁掉最前面的"(")
                            var Text= re***t.dataArray.substring(0,re***t.dataArray.length -1);           
                            var Table = eval( Text);
                           
                            //AJAX December CTP 支持以下方法转换
//                            var Table = Sy***review.Data.DataTable.parseFromJson(result);
                           
                            //清除下拉框原有列表项
                            for (x=***t.options.length-1; x > -1; x--)
                            {
                                Li***remove(0);
                            }
                           
                            //从获取的DataTable添加数据到下拉框列表项
                            for (x=0; x < Ta***.length; x++ )
                            {
                                //获取每一行
                                var Row = Table[x];         
                                //创建一个列表项                 
                                var option = do***ent.createElement("option");
                                //列表项显示文本赋值
                                op***n.text = Row.Name + " " + Ro***astName;  
                                //列表项选项值赋值
                                op***n.value = Ro***mail;                     

                                //判断浏览器类型,进行项目添加    
                                if ( wi***w.navigator.appName.toLowerCase().indexOf("microsoft") > -1)
                                   List.add(option); 
                                else
                                   List.add(option, null);         
                            }
                         }
                       );
    }
示例代码:http://ww***blogs.com/heekui/archive/2007/01/10/616332.html">http://ww***blogs.com/heekui/archive/2007/01/10/616332.html