在 VS05, 可以轻松的实现异步调用服务端方法, 不必自己劳神伤脑的写 AJAX, 只要安装了 AJAX 组件就可以轻松实现!
本文的实例需要以下 6 个步骤:
1. 你的 VS05 必须安装 AJAX.NET 1.0正式版(可以到 http://asp.net/ajax 免费下载).
2. 在需要实现异步调用服务端方法的页面放上 ScriptManager 控件, 但不需要 UpdatePanel 控件.(ScriptManager 控件在你安装了 AJAX.NET 后就能看到).
3. 修改 Web.config 文件.
4. 为网站添加 Web服务 文件.(每添加一个该文件, VS 会在网站根目录生一个同名的 .asmx 文件, 一个同名代码文件(.cs, .vb)放在 App_Code 文件夹)
5. 在 Web服务 的代码写好用于客户端异步调用的方法.
6. 在网页(aspx)写好数据发送与数据返回结果处理等脚本.
下面一一详细贴出源代码.
default.aspx
HTML CODE
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Default2.aspx.cs
"
Inherits
=
"
Default2
"
%>
<%
@ Register Assembly
=
"
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
"
Namespace
=
"
System.Web.UI
"
TagPrefix
=
"
asp
"
%>
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";
>
<
html
xmlns
="http://www.w3.org/1999/xhtml";
>
<
head
id
="Head1"
runat
="server"
>
<
title
>
无标题页
</
title
>
</
head
>
<
body
>
<
form
id
="form1"
runat
="server"
>
<
div
>
<
asp:ScriptManager
ID
="ScriptManager1"
runat
="server"
>
<
Services
>
<
asp:ServiceReference
Path
="WebService.asmx"
InlineScript
="true"
/>
<%
--
Path 值为.asmx 文件路径
--
%>
</
Services
>
</
asp:ScriptManager
>
<
input
id
="Text1"
type
="text"
/><
input
id
="Button3"
type
="button"
value
="Hello!-最简单的异步调用"
onclick
="helloCodeStudio()"
/>
</
form
>
<
script
type
="text/javascript"
>
function
helloCodeStudio(){
//
我们要为每个 WebService 传递一个客户端脚本方法用于更新页面
WebService.HelloCodeStudio(onHelloCodeStudioReturned); }
function
onHelloCodeStudioReturned(rtnValue){
//
$get 方法是 AJAX.NET 定义好的一个方法, 我们只管用就行了.
//
该方法等价于 document.getElementById(var elementId)
$get(
"
Text1
"
).value
=
rtnValue; }
</
script
>
</
body
>
</
html
>
WebService.cs
C# CODE
using
System;
using
System.Web;
using
System.Collections;
using
System.Web.Services;
using
System.Web.Services.Protocols;
using
System.Web.Script.Services;
///
<summary>
///
WebService 的摘要说明
///
</summary>
[WebService(Namespace
=
"
http://tempuri.org/
"
)] [WebServiceBinding(ConformsTo
=
WsiProfiles.BasicProfile1_1)] [ScriptService]
//
表示整个类的所有方法都允许客户端脚本异步调用
public
class
WebService : System.Web.Services.WebService {
public
WebService () {
//
如果使用设计的组件,请取消注释以下行
//
InitializeComponent();
} [WebMethod]
public
string
HelloCodeStudio() {
//
简单到只返回一个字符串
return
"
Hello Code Studio
"
; } }
web.config
XML CODE
<?
xml version="1.0"
?>
<
configuration
>
<
appSettings
/>
<
connectionStrings
/>
<
system.web
>
<
compilation
debug
="true"
>
<
assemblies
>
<
add
assembly
="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/></
assemblies
></
compilation
>
<
authentication
mode
="Windows"
/>
<!--
为 system.web 配置节加上
-->
<
httpHandlers
>
<
remove
verb
="*"
path
="*.asmx"
/>
<
add
verb
="*"
path
="*.asmx"
validate
="false"
type
="System.Web.Script.Services.ScriptHandlerFactory"
/>
<
add
verb
="GET,HEAD"
path
="ScriptResource.axd"
type
="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
validate
="false"
/>
</
httpHandlers
>
</
system.web
>
</
configuration
>