Atlas学习手记(9):异步调用Page Method

本文介绍如何在ASP.NET页面中使用Atlas调用PageMethod,并对比其与WebServiceMethod的区别。PageMethod允许直接访问页面上的服务器控件状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Atlas我们可以调用两种服务端的方法WebService MethodPage Method,在前面的使用中,我们一直都是调用WebService Method,如何去调用一个Page Method?本文将简单的介绍一下这一内容。<?XML:NAMESPACE PREFIX = O />

 

主要内容

1.如何调用Page Method

2.与WebService Method区别

 

一.如何调用Page Method

使用Atlas我们可以调用两种服务端的方法WebService MethodPage Method,在前面的使用中,我们一直都是调用WebService Method,如何去调用一个Page Method?本文将简单的介绍一下这一内容。

1.在页面的.cs文件中,我们先定义一个public的方法:

None.gif public   string  EchoString( string  s)
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
return "Hello : " + s;
ExpandedBlockEnd.gif}

再为这个方法加上WebMethod的特性,注意这一切我们都是在普通的ASPX页面中书写,而不是在.ASMX中:

None.gif [System.Web.Services.WebMethod]
None.gif
None.gif
public   string  EchoString( string  s)
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
return "Hello : " + s;
ExpandedBlockEnd.gif}

2.加入ScriptManager控件,这时候因为是Page Method,所以不再需要引入Web Service

None.gif < atlas:ScriptManager  ID ="ScriptManager1"  runat ="server" >
None.gif
None.gif
</ atlas:ScriptManager >
None.gif

3.添加HTML控件

None.gif < div >
None.gif
None.gif    
< h3 >
None.gif
None.gif        Enter your name:
< input  id ="inputName"   />
None.gif
None.gif        
< input  id ="buttonGo"  type ="button"  value ="GO"  onclick ="return OnbuttonGo_click()"   />
None.gif
None.gif    
</ h3 >
None.gif
None.gif
</ div >

4.编写JS代码调用,注意PageMethods这个类,方法EchoString仍然没变,但它却属于PageMethods类,所有的页面暴露的Page Method都应该属于PageMethods

ExpandedBlockStart.gif ContractedBlock.gif < script  type ="text/javascript"  language ="JavaScript" > dot.gif
InBlock.gif
InBlock.gif    
function OnbuttonGo_click() 
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        requestSimpleService 
= PageMethods.EchoString(
InBlock.gif
InBlock.gif            document.getElementById('inputName').value,       
//params
InBlock.gif

InBlock.gif            OnComplete    
//Complete event
InBlock.gif

InBlock.gif            );
InBlock.gif
InBlock.gif        
return false;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
function OnComplete(result) 
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        alert(result);
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif
None.gif
</ script >

编译运行:

<?XML:NAMESPACE PREFIX = V />

调用后:

二.与WebService Method区别

通过上面的例子大家可能看到了,似乎这种方式与调用WebService MethodPageMethods那儿有一点不同之外,其他的都差不多,为什么还会出现这种方式呢?现在如果我们需要在Web Method里面调用页面上的控件,那这种方式就很有价值了,对上面的例子作一下小小的改动,首先对TextBox加上runat=server属性,让它运行在服务端:

None.gif < input  id ="inputName"  runat ="server" />

再修改Page Method如下:

None.gif [System.Web.Services.WebMethod]
None.gif
None.gif
public   string  EchoString()
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
return "Hello : " + this.inputName.Value;
ExpandedBlockEnd.gif}

调用的JS代码:

ExpandedBlockStart.gif ContractedBlock.gif < script  type ="text/javascript"  language ="JavaScript" > dot.gif
InBlock.gif
InBlock.gif    
function OnbuttonGo_click() 
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        requestSimpleService 
= PageMethods.EchoString(
InBlock.gif
InBlock.gif            OnComplete    
//Complete event
InBlock.gif

InBlock.gif            );
InBlock.gif
InBlock.gif        
return false;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
function OnComplete(result) 
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        alert(result);
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif
None.gif
</ script >
None.gif

运行后调用:


可以看到,在Page Method中,我们获取到了运行在服务端的TextBox的值。如果是在WebServer Method中,就不能再这样来实现了,这一点我想就是Page Method最大的价值吧。同时对于WebService MethodPage Method的工作原理也有很大的区别,看看Dflying Chen的解释:

对于Atlas调用Web Service来说,当请求被发送时候,仅仅简单传给服务器方法的参数数据。而对于Atlas调用Page Method来说,传输的数据将会很多,将把表单中所有的域,包括ViewState,一起传送到服务器。在服务器端,它的工作方式也和普通的PostBack很相似:在这个Page Method被调用前,所有的服务器控件将得到它自身的状态。这也正是为什么Page Method中可以访问页面中控件状态的原因

在实际使用中,我们也是尽可能多的使用WebService Method,只在必要的时候才使用Page Method

完整示例下载:http://files.cnblogs.com/Terrylee/PageMethodDemo.rar
转自 http://www.cnblogs.com/Terrylee/archive/2006/07/31/Atlas_Calling_PageMethod.html

转载于:https://www.cnblogs.com/wking108/archive/2006/08/07/470125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值