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>
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的方法均设置在如下位置
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">
三、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