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);
}
}
);
}
新聞熱點
疑難解答
圖片精選